2012-07-13 53 views
1

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

中,谷歌文件的代码如下:

=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查询看起来不错。事实上,有许多在线教程,其中推荐了我在这里完成的工作。

雅虎查询返回正确的结果,这是唯一的结果。

了Bing Xpath查询发现不匹配的Bing web page给出的结果,即使有仅XPath查询匹配一个XML节点结果的数量。更多细节请见spreadsheet here

这是哪里都出错了?

+0

Downvoting因为没有代码显示。 – 2012-07-13 10:05:52

+0

这段代码全部都在Google Doc中,它也显示了结果并给出了搜索引擎的源代码的一些细节。我现在已经为这个问题添加了一些内容。 – snim2 2012-07-13 11:12:11

回答

1

试试这个....

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

哇,好吧,这工作。似乎我的代码和你的唯一区别是围绕URL中的键/值对的额外引号。 – snim2 2012-08-21 21:57:27

0

魔鬼是在细节 - 如果你没有告诉我们你的代码,我们找不到你的错误。

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

+0

该代码在我链接到的Google文档中可见。 – snim2 2012-07-13 11:05:27

+0

关于HTML的一点很有意思。我怀疑这就是Google查询不起作用的原因,但它不能解释雅虎的结果。 – snim2 2012-07-13 11:55:49

1

由于URL中未编码的双引号,Google one可能不起作用。由于importxml字符串分隔符是双引号,所以这可能不起作用。将双引号编码为%22

不知道Bing。最好的猜测是你的XPath正在工作,但是Bing出于某种原因向你和谷歌文档返回了不同的结果。

+0

好吧,我已经把引号关掉了,所以现在这条语句读取'= importxml(“http://www.google.com/search?q=xpath+tutorial&num=30&pws=0”,“// div [@ id ='resultStats']“)'和电子表格中的输出仍然是相同的:( – snim2 2012-07-15 19:33:07

+0

@ snim2我唯一能想到的是Google搜索结果页面发送给Google文档(这可能与您的不同在你的浏览器中看到)没有包含一个id属性为“resultStats”的div – 2012-07-20 18:16:02

+0

这是可能的,但我不明白为什么会这样,而且这个清楚/使用/工作,因为有很多教程推荐我使用的方法! – snim2 2012-07-22 19:01:05