2010-12-13 48 views
1

有谁知道XPath表达式可以让我提取从baidu.com返回的所有搜索结果?从中文搜索中提取网页链接的XPath表达式(baidu.com)

例如,在R,我通常会做这样的事情的:

# load libraries  
library(RCurl) 
library(XML) 

# get webpage 
doc <- getURL("http://www.baidu.com/s?rn=100&bs=chivas+regal&f=8&wd=chivas+regal") 

# html structure 
html <- htmlTreeParse(doc, useInternalNodes = TRUE, error=function(...){}) 

# use xpath expression to get links 
nodes <- getNodeSet(html, "//a[@href]") 

然而,这仅获得约10个链接,当我应该有100左右。所以,我认为,这意味着有一些关于baidu html结构对我来说不是很清楚。

非常感谢您的时间。

+0

使用[Tidy](http://valet.htmlhelp.com/tidy/)并将名称空间绑定添加到XPath表达式,它按预期工作。错误可能出现在您的HTML解析器或XPath引擎中。相应地重新标记。 – 2010-12-13 16:24:27

回答

2

如果Xpath不是绝对要求,请尝试使用基于正则表达式的方法。以下假定所有链接都以http://开头,并用双引号引起来。它使用strapply来匹配指定的正则表达式,并提取出反向引用,即括号内的部分。

URL <- "http://www.baidu.com/s?rn=100&bs=chivas+regal&f=8&wd=chivas+regal" 
Lines <- readLines(URL) 
library(gsubfn) 
links <- strapply(Lines, '"(http://[^"]*)"', simplify = c) 
+0

+1非常好,我可以利用这个! – 2011-03-01 14:07:28