【问题标题】:I'm facing Xpath Query Challenge for Google Sheet Import XML funtion我正面临 Google Sheet Import XML 功能的 Xpath Query Challenge
【发布时间】:2022-11-01 10:58:51
【问题描述】:

我想从以下房地产经纪人的个人资料链接导入数据(例如此人的网站 URL、Facebook 和 Twitter 等社交媒体链接到 Google 表格:

https://www.realtor.com/realestateagents/568117e3bb954c0100693e2c

但是当我通过像这样从检查部分复制“完整 Xpath 查询”并按 Enter 键来应用“ImportXML”功能时:

=IMPORTXML("https://www.realtor.com/realestateagents/5682d84c7e54f70100200a6b","/html/body/div[1]/div[1]/div/div/div[1]/div[3]/section /div/div/div[1]/div/div/div/div/div[2]/div[1]//@href")

结果显示错误,并写入单元格#N/A 并显示一条消息:

'导入的内容为空'

我多次尝试在 Google 表格中应用 IMPORTXML 功能,我期待链接网站 URL 和社交链接等数据会自动生成,但都是徒劳的,它只显示 #N/A 和一条短消息:“已导入内容为空”

【问题讨论】:

    标签: google-sheets google-sheets-formula xpathquery


    【解决方案1】:

    在这种情况下,下面的示例公式怎么样?

    示例公式:

    =IMPORTXML(A1,"//ul[@class='footer-list-icons footer-social-links']//li/a/@href")
    
    • https://www.realtor.com/realestateagents/568117e3bb954c0100693e2c 的 URL 被放入单元格“A1”中。

    • 示例 xpath 为 //ul[@class='footer-list-icons footer-social-links']//li/a/@href

    • 或者,我认为您也可以使用以下示例公式。

        =IMPORTXML(A1,"//ul[contains(@class,'social-links')]//li/a/@href")
      
        =IMPORTXML(A1,"//ul[contains(@class,'social-links')]//a/@href")
      
        =IMPORTXML(A1,"//ul[contains(@class,'social-links')]//@href")
      

    测试:

    当使用这个公式时,得到以下结果。

    笔记:

    • 在这个 XPath 和公式中,我确认这可以用于当前服务器。但是,当服务器端的规格发生变化时,这个公式可能无法使用。

    参考:

    添加:

    从您的以下回复中,

    您试图在某种程度上回答我的问题但我不需要“房地产经纪人”本身的社交链接,而是我需要我刚刚在上面分享的房地产经纪人资料的特定人的社交媒体链接。当您打开此链接时:realtor.com /realestateagents/568117e3bb954c0100693e2c 然后你向下滚动它,在右侧你会看到一个名为“Contact Details”的名字,在那里你会看到他的网站 url 和其他社交链接(如 Facebook、twitter 等)与文本超链接。我希望他们水平(按列)而不是垂直(按行)在 Google 表格中列出 -

    在这种情况下,不幸的是,这些值不能使用 XPath 直接检索。因为这些值是使用 Javascript 放置的。但是,幸运的是,这些值似乎作为 JSON 数据包含在 HTML 数据中。因此,在这种情况下,我想使用 Google Apps 脚本。示例脚本如下。

    示例脚本:

    请将以下脚本复制并粘贴到电子表格的脚本编辑器中,然后保存该脚本。并且,请将=SAMPLE("https://www.realtor.com/realestateagents/568117e3bb954c0100693e2c/") 的自定义函数放入单元格。通过这种方式,返回值。

    function SAMPLE(url) {
      const res = UrlFetchApp.fetch(url);
      const str = res.getContentText().match(/<script id="__NEXT_DATA__" type="application/json">([sSw]+)</script>/);
      const obj = JSON.parse(str[1]);
      return [obj.props.initialReduxState.profile.profileData.social_media.map(({ href }) => href)];
    }
    
    • 关于您对And I want them to list in the Google Sheet horizontally (column wise) not vertically (row wise) 的附加请求,当通过将=SAMPLE("https://www.realtor.com/realestateagents/568117e3bb954c0100693e2c/") 放入单元格“A1”来运行此示例脚本时,以下值将返回到如下一行。

    【讨论】:

    • 您试图在一定程度上回答我的问题但我不需要“房地产经纪人”本身的社交链接,而是我需要我刚刚在上面分享的房地产经纪人资料的特定人员的社交媒体链接。当您打开此链接时:realtor.com/realestateagents/568117e3bb954c0100693e2c然后向下滚动,在右侧你会看到一个名为“Contact Details”的消息,在那里你会看到他的网站 url 和其他社交链接(如 Facebook、twitter 等)与文本超链接。我希望他们在 Google 表格中水平(按列)而不是垂直(按行)列出
    • @Faisal Yaqoob 感谢您的回复。首先,我为我糟糕的英语水平深表歉意。从您的回复中,我又添加了一个示例脚本。你能确认一下吗?如果我误解了你的问题,我再次道歉。
    • 感谢您提供即时帮助社交媒体链接,但仅包含网站 3。其中包含所有社交媒体链接,但显示“#REF!”值或“错误”值价值观
    • @Faisal Yaqoob 感谢您的回复。关于but it doesn't send back some values from the webpages: 1. Which have only one social media link 2. Which don't have any social media link but only contains website 3. Which have all the social media links but it shows either '#REF!" value or an "ERROR" value I don't know why is it happening but still it's working and sending back on some values,当我用我提出的脚本测试=SAMPLE("https://www.realtor.com/realestateagents/568117e3bb954c0100693e2c/") 时,返回了以上2 个URL。所以,我无法复制你的情况。
    • @Faisal Yaqoob 为了正确复制您的情况,您能否提供使用=SAMPLE("https://www.realtor.com/realestateagents/568117e3bb954c0100693e2c/") 和我建议的脚本正确复制您的情况的详细流程?借此,我想确认一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 2019-01-28
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多