coderLMN / AutomatedDataCollectionWithR

《基于 R 语言的自动化数据采集技术》读者讨论区
28 stars 10 forks source link

老师,365淘房网站上的数据爬取出问题,麻烦您帮我看一下 #14

Open dayushan opened 7 years ago

dayushan commented 7 years ago
.libPaths("D:/R/library")
library(RCurl)
library(bitops)
library(XML)
library(stringr)
library(plyr)
library(rvest)
##i为2010和2011时会报错
##Error in eval(substitute(expr), envir, enclos) : 
#  input conversion failed due to input error, bytes 0xA9 0x4F 0xC6 0xF0 [6003]
for(i in 2012:2014){
    for(j in 1:12){
        mac_url<-paste("http://news.nj.house365.com/newslist/esfpd/esfbb/date=",i,"-",j,"-11/",sep="")
              #paste("http://news.nj.house365.com/newslist/esfpd/esfbb/date=",paste(i,j,11,sep="-"),"/",sep="")
        url<-getHTMLLinks(mac_url)[4]
        if(url=="javascript:void(0);"){
            mac_url<-paste("http://news.nj.house365.com/newslist/esfpd/esfbb/date=",i,"-",j,"-21/",sep="")
                #paste("http://news.nj.house365.com/newslist/esfpd/esfbb/date=",paste(i,j,21,sep="-"),"/",sep="")
              url<-getHTMLLinks(mac_url)[4]
        }
        #wp<-getURL(url,.encoding="gb2312") #用网页本身的编码
        #wp2=iconv(wp,"gb2312","UTF-8") #转码
        #Encoding(wp2) #UTF-8
        #doc <- htmlParse(wp2,asText=T,encoding="UTF-8")
        web<-read_html(url,encoding="gb2312")
               ..........此处代码省略........
            }
}

以上为我的代码,但是在采集2012年4月的行情数据时报错,报错内容如下:

Error in eval(substitute(expr), envir, enclos) :

input conversion failed due to input error, bytes 0xA9 0x4F 0xC6 0xF0 [6003]

麻烦吴老师帮我看一下

coderLMN commented 7 years ago

web<-read_html(url,encoding="gb2312")      # 调试发现是这一句出错,错误信息是 encoding 不对
# 仔细看了一下网页的 <head> 部分,有: 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
# 网页声明的 encoding 确实是 gb2312,但是偶尔碰到过网页实际编码和声明不符
# 在上一条语句尝试把 encoding 改为 gbk:
web<-read_html(url,encoding="gbk")
# 运行正常,没有报错。由此可见,这个问题是由于网页的 encoding 不规范导致的。