R:发布搜索表单并抓取结果

时间:2014-08-03 01:12:38

标签: r rcurl

我是网络抓取的先驱,而且我还没有熟悉我试图解决的问题的命名法。尽管如此,我已经详尽地搜索了这个特定的问题并且找不到解决方案。如果它已经在其他地方,我提前道歉并感谢你的建议。

了解它。我试图用R构建一个脚本: 1.在报纸网站上搜索特定关键词;
2.给出我想要的结果/页数的标题,日期和内容。

我已经知道如何发布搜索表单并从第一页抓取结果,但到目前为止我从下一页获取内容方面都没有成功。老实说,我甚至不知道从哪里开始(我已经阅读了有关RCurl的内容等等,但它对我来说仍然没有意义)。

下面是对我到目前为止编写的代码的部分示例(仅抓取第一页的标题以保持简单)。

curl <- getCurlHandle()
curlSetOpt(cookiefile='cookies.txt', curl=curl, followlocation = TRUE)
options(RCurlOptions = list(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl")))

search=getForm("http://www.washingtonpost.com/newssearch/search.html", 
               .params=list(st="Dilma Rousseff"), 
               .opts=curlOptions(followLocation = TRUE), 
               curl=curl)
results=htmlParse(search)
results=xmlRoot(results)
results=getNodeSet(results,"//div[@class='pb-feed-headline']/h3")
results=unlist(lapply(results, xmlValue))

我知道我可以直接在网站上执行搜索,然后检查URL以获取有关页码的参考或每页中显示的新闻文章的编号,然后使用循环来抓取每个不同的页面。

但请记住,在我学习了如何从第1页到第2页,第3页等之后,我将尝试开发我的脚本,以便在不同的网站上使用不同的关键字执行更多搜索时间,所以前一段的解决方案对我来说似乎并不是最好的。

如果您有任何其他解决方案建议我,我会很乐意接受它。我希望我能够清楚地说出我的问题所以我可以分享你的想法,也许可以帮助那些面临类似问题的人。我提前感谢你们。

祝你好运

1 个答案:

答案 0 :(得分:3)

首先,我建议您使用httr而不是RCurl - 对于大多数问题,它更容易使用。

r <- GET("http://www.washingtonpost.com/newssearch/search.html", 
  query = list(
    st = "Dilma Rousseff"
  )
)
stop_for_status(r)
content(r)

其次,如果您在浏览中查看网址,您会注意到点击网页编号会修改startat查询参数:

r <- GET("http://www.washingtonpost.com/newssearch/search.html", 
  query = list(
    st = "Dilma Rousseff",
    startat = 10
  )
)

第三,您可能想尝试我的实验rvest包。它可以更轻松地从网页中提取信息:

# devtools::install_github("hadley/rvest")
library(rvest)

page <- html(r)
links <- page[sel(".pb-feed-headline a")]
links["href"]
html_text(links)

我强烈建议您阅读selectorgadget教程并使用它来确定您需要的css选择器。