Очистите данные с помощью Rcurl

Я хочу сканировать некоторые данные по следующему URL-адресу, используя 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>

и ссылка тоже выглядит так

http://datacenter.mep.gov.cn/report/air_daily/air_dairy.jsp?city&startdate=2013-12-15&enddate=2013-12-30&page=31

есть дата начала и дата окончания и страница..

затем я начал сканировать сеть.

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 также приветствуются!


person Bigchao    schedule 24.02.2014    source источник


Ответы (1)


Если 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
person lukeA    schedule 24.02.2014
comment
большое спасибо! @ЛюкА. Я думаю, что есть некоторые проблемы с кодировкой китайских символов в пакете XML. Все возвращаемые данные имеют какой-то странный характер. У вас есть предложения, как с этим бороться? - person Bigchao; 24.02.2014