我是网络抓取的先驱,而且我还没有熟悉我试图解决的问题的命名法。尽管如此,我已经详尽地搜索了这个特定的问题并且找不到解决方案。如果它已经在其他地方,我提前道歉并感谢你的建议。
了解它。我试图用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页等之后,我将尝试开发我的脚本,以便在不同的网站上使用不同的关键字执行更多搜索时间,所以前一段的解决方案对我来说似乎并不是最好的。
如果您有任何其他解决方案建议我,我会很乐意接受它。我希望我能够清楚地说出我的问题所以我可以分享你的想法,也许可以帮助那些面临类似问题的人。我提前感谢你们。
祝你好运
答案 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选择器。