【问题标题】:XPath query in Google docs does not match HTML sourceGoogle 文档中的 XPath 查询与 HTML 源不匹配
【发布时间】:2012-07-13 09:08:53
【问题描述】:

使用XpathBuilder,我可以构建一个简单的搜索引擎查询并使用XPath 从搜索结果中提取数据。我在 Google Doc 电子表格here 中有一些简单的示例,它在各种搜索引擎上运行查询“XPath 教程”并尝试提取每个搜索引擎返回的结果数量。

Google Doc 中的代码如下:

=importxml("http://www.google.com/search?q="xpath+tutorial"&num=30&pws=0", 
           "//div[@id='resultStats']")
=importxml("http://www.bing.com/search?q=xpath+tutorial&count=30", 
           "//span[@class='sb_count']")
=importxml("http://search.yahoo.com/search?p=xpath+tutorial&n=30", 
           "//span[@id='resultCount']")

这有一些我不明白的奇怪之处。首先,Google 搜索没有返回任何结果,但 XPath 查询看起来不错。确实,有许多在线教程可以准确地推荐我在这里所做的工作。

Yahoo 查询返回正确的结果,它是唯一的。

Bing Xpath 查询找到的结果数与Bing web page 上给出的结果不匹配,即使只有一个 XML 节点与 XPath 查询匹配。更多详情请关注spreadsheet here

哪里出了问题?

【问题讨论】:

  • 拒绝投票,因为没有显示代码。
  • 代码都在谷歌文档中,该文档也显示了结果,并提供了来自搜索引擎的源代码的一些详细信息。我现在已经在问题中添加了一些。

标签: xml xpath google-docs


【解决方案1】:

试试这个....

=importxml("http://www.google.com/search?q='xpath+tutorial&num=30&pws=0'", "//div[@id='resultStats']")

【讨论】:

  • 哇,好,这工作。我的代码和你的代码之间的唯一区别似乎是 URL 中键/值对周围的额外引号。谢谢。
【解决方案2】:

由于 URL 中未编码的双引号,Google 可能无法正常工作。由于importxml 字符串分隔符是双引号,所以这可能行不通。将双引号编码为%22

不确定 Bing。最好的猜测是您的 XPath 正在运行,但 Bing 出于某种原因向您和 Google Docs 返回了不同的结果。

【讨论】:

  • 好的,我已经去掉了引号,所以现在语句读取=importxml("http://www.google.com/search?q=xpath+tutorial&num=30&pws=0", "//div[@id='resultStats']") 并且电子表格中的输出仍然相同:(
  • @snim2 我唯一能想到的是发送到 Google Docs 的 Google 搜索结果页面(可能与您在浏览器中看到的不同)不包含具有 id 属性的 div “结果统计”。
  • 有可能,但我不明白为什么会这样。此外,这显然 /used/ 可以工作,因为有很多教程推荐了我使用过的方法!
【解决方案3】:

魔鬼在细节中 - 如果您不向我们展示您的代码,我们将无法为您找到您的错误。

但是,XPath 被定义为针对 XML 运行,而您似乎是针对 HTML 运行它。因此,混淆可能在于 HTML 映射到 XML 的方式:例如通过添加隐式节点(如 tbody)、通过大小写折叠或通过命名空间处理。

【讨论】:

  • 关于 HTML 的观点很有趣。我怀疑这就是 Google 查询不起作用的原因,但它没有解释来自 Yahoo 的结果。
猜你喜欢
  • 2012-08-02
  • 1970-01-01
  • 2019-05-06
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 2014-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多