使用htmlParse()getnodeset()和html_nodes()废弃无法检索正确数量的节点

时间:2015-10-11 12:25:18

标签: r xml-parsing web-scraping html-parsing rvest

我试图抓住Zoopla网站,以便将宣传的每个属性转换为单个R dataFrame。为此我使用XML,rvest和RCurl包。

library(rvest)
library(RCurl)
library(XML)

我已经加载了一个链接,该链接使用getURL获取伦敦周围的所有属性,显示的属性数量可以通过URL末尾的size参数控制。

zoopla_web  = getURL("http://www.zoopla.co.uk/for-sale/property/london/w1/west-end-mayfair-soho-marylebone-south/?q=w1&category=residential&radius=0&include_retirement_homes=true&include_shared_ownership=true&new_homes=include&polyenc=sk~zHney%40ni%40d%7Db%40dhN%7CvXjjo%40hoFjy%5En_d%40bbL%7BtAxaIczRawHwgeAgaHo%7CSejAmaqA_kEsmTcvHogJmkKc~Eukd%40uqGw~F%3FwhM~zKosF~oUct%40f~vA&search_source=refine&page_size=300&pn=1&view_type=list")

尺寸由网址末尾的此块控制

&page_size=300&pn=1&view_type=list

最初我已经将大小设置为50,试图将每个属性作为一个节点使用XPath,因为我已经使用htmlParse()解析了网络(我也尝试过使用html()相同的结果)并使用getNodeSet()

将其转换为节点
dc          = htmlParse(zoopla_web)
nodeGeneral = getNodeSet(dc,'//*[contains(concat( " ", @class, " " ), concat( " ", "listing-results-right", " " ))]')

问题:当我将网址的大小设置为50时,它完美地工作,而nodeGeneral是50个节点的列表,100,120,但123以上(例如300) )我只获得123个节点。

我认为这不是getURL的失败,因为当size设置为123到200时文件的大小会变大,而当增加时会变得越来越高。我的猜测是getNodeSet()或htmlParse()函数有问题。有什么想法吗?

由于

编辑:只能使用rvest包,问题仍然存在,预计150个时有123个节点

dc          = html("http://www.zoopla.co.uk/for-sale/property/london/w1/west-end-mayfair-soho-marylebone-south/?q=w1&category=residential&radius=0&include_retirement_homes=true&include_shared_ownership=true&new_homes=include&polyenc=sk~zHney%40ni%40d%7Db%40dhN%7CvXjjo%40hoFjy%5En_d%40bbL%7BtAxaIczRawHwgeAgaHo%7CSejAmaqA_kEsmTcvHogJmkKc~Eukd%40uqGw~F%3FwhM~zKosF~oUct%40f~vA&search_source=refine&page_size=150&pn=1&view_type=list")
nodeGeneral = html_nodes(dc,xpath='//*[contains(concat( " ", @class, " " ), concat( " ", "listing-results-right", " " ))]')

0 个答案:

没有答案