繁体   English   中英

XPath 用于<address>在 Google 表格中使用 ImportXML 标记

[英]XPath for an <address> tag using ImportXML in Google Sheets

我正在尝试使用 importXML 和 Google Sheets 从新闻网站中提取文章的作者姓名。 代码如下所示:

<div class="grp-content">
        <h2 class="title">
        <div class="excerpt">
        <footer class="byline">
             <address data-aurl="/author/john-smith/" data-aname="JOHN 
               SMITH"></address>

我尝试了这条路径的几种变体,经常返回“导入的内容为空”:

=importxml(A2,"//div[@class='grp-content']/footer/address/@data-aname")

任何帮助都会很棒。 谢谢!

如果你的 XPath 被修改了,这个怎么样?

//div[@class='grp-content']//footer//address/@data-aname

而且这也可以使用//address/@data-aname

如果这些不是你想要的结果,你能提供“A2”的网址吗? 我想尝试测试。

编辑:

根据您提供的 URL,我确认了 HTML 数据。 URL的基本单元结构如下。

<div class="grp-content">
  <h2 class="title">
    <a href="### url ###" title="#####">#####</a>
  </h2>
  <div class="excerpt">
    <p>#####</p>
  </div>
  <footer class="byline">
    <address data-aurl="/author/john-smith/" data-aname="JOHN SMITH"></address>
    <time datetime="2018-12-11T12:34:56Z">11 Dec 2018, 12:34 PM PST</time>
    <a class="byC" href="### url ###" data-dsqi="1234567"></a>
  </footer>
</div>

当使用IMPORTXML()从上述结构中检索值时,获得以下结果。

成功
  • 每个翼片的信息a可以被检索。
  • 当使用//*[@class='byC']/@data-dsqi//a[@class='byC']/@data-dsqi ,可以检索到1234567
  • //*[@class='byC']/../text()//a[@class='byC']/../text()使用, 11 Dec 2018, 12:34 PM PST可以被检索。
  • 当使用//*[@class='excerpt']/../h2//div[@class='excerpt']/../h2 ,可以检索“h2”的文本值。
失败
  • 当使用//*[@class='byC']/../time"//a[@class='byC']/../time" ,返回#N/A
  • 当使用//*[text()='11 Dec 2018, 12:34 PM PST']//*[text()='11 Dec 2018, 12:34 PM PST']/@datetime#N/A被返回。
  • 当使用//*[@class='byline']/../h2//footer[@class='byline']/../h2 ,返回#N/A

解决方法

在我的环境中,无法检索address的值。 从上面的结果,我发现IMPORTXML()可能无法正确解析footer 因此,作为一种解决方法,我建议使用 Google Apps Script 而不是IMPORTXML()

添加:

在这种情况下使用 Google Apps 脚本时。 作为示例脚本,这个怎么样? 无法直接解析此 HTML 数据。 因此,它使用 Parser 提取包括您要使用的值在内的部分值,并使用XmlService解析和检索值。

示例脚本:

 function getValuesFromUrl() { // Retrieve HTML data var url = "https://www.breitbart.com/tag/cnn/"; var html = UrlFetchApp.fetch(url).getContentText(); // Parse HTML data var res = Parser.data(html).from("<section id=\\"MainW\\">").to("</section>").build(); var decode = XmlService.parse('<r>' + res + '</r>'); var r = decode.getRootElement().getChildren(); // Retrieve values var values = []; for (var i = 0; i < r.length; i++) { var s = r[i].getChildren("article"); for (var j = 0; j < s.length; j++) { var t = s[j].getChildren("div"); for (var k = 0; k < t.length; k++) { var u = t[k].getChildren("footer"); for (var l = 0; l < u.length; l++) { values.push(u[l].getChild("address").getAttribute("data-aname").getValue()); } } } } Logger.log(values) }

笔记:

  • 要使用此脚本,请将脚本复制并粘贴到脚本编辑器中。
  • 在运行脚本之前,请安装 Parser 的 GAS 库。 您可以在此处查看详细信息。
  • 安装库后,请运行getValuesFromUrl()函数。 这样,您可以在 Log 中看到这些值。

参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM