前一阵子,看见有人采集各地楼盘信息比较感兴趣,闲暇时间决定自己也尝试采集一下,原本打算采集自己家的,结果发现我家楼盘在链家房产没有信息,太尴尬了!最后决定采集下南京地区的楼盘信息。
大致看了以下,南京地区链家房产总共有4982个小区,N多房源,打算分几步采集完:
第一步:采集南京各小区的一些基本信息,比如:小区楼盘均价,小区建成时间,小区成交量,小区地理位置等;
第二部:采集各个小区里的房源情况;
第三步:暂时没有想到
[采集结果]第一步小区信息采集完成,效果如下图所示(下面只是采集2页60个小区的图):
[采集代码]采集代码如下:
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
import requests from bs4 import BeautifulSoup import time import pymongo client = pymongo.MongoClient('localhost',27017) njlianjia = client['njlianjia'] fcinfo = njlianjia['fcinfo'] # 获取房产信息 def getinfo(url): html = requests.get(url) soup = BeautifulSoup(html.text.encode(html.encoding), 'lxml', from_encoding='utf-8') # 小区名字 xiaoquList = soup.select('div.info > div.title > a') # 小区均价 prices = soup.select('div.xiaoquListItemPrice > div.totalPrice > span') # 还有多少二手房出售 sellcounts = soup.select('div.xiaoquListItemSellCount > a > span') # 房产信息 houseinfos = soup.select('div.info > div.houseInfo') # 坐标 positionicons = soup.select('div.info > div.positionInfo') #positionicons = soup.select('.district') # 小区建成时间 times = soup.select('div.info > div.positionInfo') for xqname,xqprice,xqscount,hinfo,pinfo,time in zip(xiaoquList,prices,sellcounts,houseinfos,positionicons,times): info = { '小区名字' : xqname.get_text(), '小区均价' : xqprice.get_text(), '在售数量' : xqscount.get_text(), '成交信息' : list(hinfo.stripped_strings), '小区坐标' : list(pinfo.stripped_strings), '小区年龄' : str(time).split('</')[-2].split('/')[-1].strip() } fcinfo.insert(info) if __name__ == '__main__': print('waiting....') for i in range(1,101): url = 'http://nj.lianjia.com/xiaoqu/pg{}/'.format(str(i)) getinfo(url) print('the %s page is ok!' %(i)) time.sleep(2) |
[后续]
1、初步代码有不少的局限性,比如,没有设置header;
2、好久没有正儿八经地采集入库,中间出现各种问题,尴尬!看样子还是熟能生巧;
3、代码很粗糙,发出来,后续有时间完善,或者希望有缘人能够完善它;