我想使用Rcurl和XML从以下网址抓取一些数据。
http://datacenter.mep.gov.cn/report/air_daily/air_dairy.jsp?&lang=
数据范围从“2000-06-05”到“2013-12-30”,超过10000页。
此页面中的元素与数据相关联。
<form name="report1_turnPageForm" method=post
action="http://datacenter.mep.gov.cn:80/.../air.../air_dairy.jsp..." style="display:none">
<input type=hidden name=reportParamsId value=122169>
<input type=hidden name=report1_currPage value="1">
<input type=hidden name=report1_cachedId value=53661>
</form>
,链接也是这样的
有startdate和enddate以及页面..
然后我开始爬网。require(RCurl)
require(XML)
k = postForm("http://datacenter.mep.gov.cn/report/air_daily/air_dairy.jsp?&lang=")
k = iconv(k, 'gbk', 'utf-8')
k = htmlParse(k, asText = TRUE, encoding = 'utf-8')
那时......我不知道下一步该做什么......我不确定自己是否在正确的轨道上?
我也试过这个
k = sapply(getNodeSet(doc = k, path = "//font[@color='#0000FF' and @size='2']"),
xmlValue)[1:24]
它不起作用..
能提出一些建议吗?非常感谢!
Scrapy和beautifulsoup解决方案也受到欢迎!
答案 0 :(得分:2)
如果XML
足够,那么这可能是一个起点:
require(XML)
url <- "http://datacenter.mep.gov.cn/report/air_daily/air_dairy.jsp?city&startdate=2013-12-15&enddate=2013-12-30&page=%d"
pages <- 2
tabs <- vector("list", length=pages)
for (page in 1:pages) {
doc <- htmlParse(paste(suppressWarnings(readLines(sprintf(url,
page),
encoding="UTF-8")),
collapse="\n"))
tabs[[page]] <- readHTMLTable(doc,
header=TRUE,
which=4) # readHTMLTable(doc)[["report1"]]
}
do.call(rbind.data.frame, tabs) # output