在R,relenium中刮掉整个xml页面

时间:2014-04-01 21:49:54

标签: xml r web-scraping

尝试抓取类似于以下链接的页面,页面不会立即加载所有结果 - 它会等待您滚动到页面末尾,然后再加载更多结果。因此,当下面的代码运行时,它只会获取到目前为止已加载的结果(在此示例中为20,000中的16个)。

https://www.rbauction.com/search?id=ar&region=Europe&s=YXI3fE49NDI5NDk1NzE5MCs0Mjk0MjM4MzMy

现在使用这个基本代码:

require(relenium)
require(XML)
firefox=firefoxClass$new()
url="https://www.rbauction.com/search?id=ar&region=Europe&s=YXI3fE49NDI5NDk1NzE5MCs0Mjk0MjM4MzMy"
url=sprintf(url)
firefox$get(url)
doc=htmlParse(firefox$getPageSource())
title=xpathSApply(doc, "//div[@class='display-text']",xmlValue)
title

这只会产生前16个"标题"在网页上(有超过20,000)。有任何想法吗?

1 个答案:

答案 0 :(得分:1)

在此处搜索其他内容时看到此查询。不确定是否为时已晚。我最近在另一个网站遇到过类似的挑战。在这种情况下的技巧是在源中找到模仿向下滚动操作的元素,并使用relenium单击它。我无法访问上述链接,因此我将演示我的示例。

示例网址:http://www.snapdeal.com/products/computers?sort=plrty&

上面的页面一次只显示15/20个产品。下面的代码模仿了向下滚动动作

代码:

  

火狐$ GET(" http://www.snapdeal.com/products/computers?sort=plrty&&#34)

     

buttonElement< - firefox $ findElementByXPath(" // * [@ id =' seeMoreProducts']")

     

buttonElement $点击()

您只需将其置于循环中并重复,具体取决于一次性显示的结果总数和结果。

请注意,随着结果数量的增加而您继续向下滚动,所有数据将继续显示在页面上,这将使此过程非常缓慢。

最终,我找到了一个替代方案,我能够理解不同页面的更改URL。虽然它们可能不会显示在地址栏中,但实际的网址却在变化。只是探索源代码,您应该能够找到它。