小小爬虫学习中(四)
2016.10.10
放之
一个实习生
 热度
℃
前言 一个月前的一次信息抓取,数据不多,信息是上海市的废品回收站。没什么可说的。代码也简单,不过问题还是在代码上。最开始用R,因为rvest包提取表格的效果很好。后来还是不行,就只有用python了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 library (rvest)library (xml2)makeUrl <- function (i) { urllist = list() parturl <- "http://www.sh-recycle.org/hyshow.asp?id=" initurl <- paste(parturl,i,sep = '' ) } webcontent = list() Origin_InfoData = data.frame("详细" =c("备 案 号" , "会 员 号" ,"企业名称" ,"单位地址" ,"联系电话" , "资质认定" )) for (i in 1 :1518 ){ webcontent <- read_html(makeUrl(i)) temp_Table <- webcontent %>% html_table(fill = TRUE ) if (length(temp_Table)==0 ){ print(paste("企业不存在,ID:" ,i)) }else { temp_InfoData <- data.frame(temp_Table[9 ][]) names(temp_InfoData) <- c("详细" , i) Origin_InfoData <- merge(Origin_InfoData,temp_InfoData,by = "详细" ) } } head(Origin_InfoData)
代码很简单,但是就是300条之后就不行了,报错不明显,查也查不到。怎么解决也解决不了,十分懊恼。最后直接去看那个ID的信息发现,在这个网站上的内容条目调换了,虽然都是这几样,但是新增了一个属性,并且把顺序改了。因此导致R的数据框合并不了。最后用python获取到。顺便吐槽这个网站的结构真差,全是table,tr,td嵌套。而且嵌套之深深似海。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import requestsfrom bs4 import BeautifulSoupfor i in range(1 ,1518 ): try : url = "http://www.sh-recycle.org/hyshow.asp?id=" +str(i) html_text = requests.get(url).text soup = BeautifulSoup(html_text, 'lxml' ) infotable = soup.findAll('table' )[8 ] info = infotable.findAll('td' ) with open('./ssssss.txt' ,'a' ) as f: for i in info: f.write(i.text.encode('utf-8' )+"/" ) f.write('\n' ) except Exception as e: pass finally : pass
清洗< shanghaiss.txt | awk -F "/" '{for (i=1;i<=NF;i+=2)printf $i "/" ;printf"\n"}'
最后 不得不说异步之厉害。Node.js + Request抓拉勾,分分钟被禁。而且测了一下移动端,5300多条数据好像1秒还是2秒的样子就到手了。最后的最后,不要用公司的网去爬东西。╮(╯▽╰)╭再也不能肆无忌惮了。定个小目标,看看Python下的异步写法。-_-