日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何高效地爬取链家的房源信息(四)

發布時間:2023/11/27 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何高效地爬取链家的房源信息(四) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python實現的鏈家網站的爬蟲第四部分,最后一部分。


本系列文將以鏈家南京站為例,使用Python實現鏈家二手房源信息的爬蟲,將數據爬取,并存入數據庫中,以便使用。


本系列第一部分為基礎:

如何高效地爬取鏈家的房源信息(一)


本系列第二部分為爬取小區信息:

如何高效地爬取鏈家的房源信息(二)


本系列第三部分為爬取在售二手房信息:

如何高效地爬取鏈家的房源信息(三)


本文是第四部分,爬取歷史成交二手房信息并存入數據庫,部分代碼依賴于第一部分,同時依賴于第二部分的結果。


在前文中已經獲取了小區信息,并存在了數據庫中,直接讀庫遍歷小區進行爬取:

def do_xiaoqu_chengjiao_spider(db_xq,db_cj):

? ? """

? ? 批量爬取小區成交記錄

? ? """

? ? count=0

? ? xq_list=db_xq.fetchall()

? ? for xq in xq_list:

? ? ? ? xiaoqu_chengjiao_spider(db_cj,xq[0],xq[1])

? ? ? ? count+=1

? ? ? ? print ('have spidered %d xiaoqu %s' % (count,xq[0]))

? ? print( 'done')


對某一個小區內的所有成交房源進行爬取,需要分頁:

def xiaoqu_chengjiao_spider(db_cj, xq_url=u"https://nj.lianjia.com/xiaoqu/1411000000391/", xq_name=u"default"):

? ? """

? ? 爬取小區成交記錄

? ? """

? ? url = xq_url.replace('xiaoqu/','chengjiao/c');

? ? try:

? ? ? ? req = urllib.request.Request(url, headers=hds[random.randint(0, len(hds) - 1)])

? ? ? ? source_code = urllib.request.urlopen(req, timeout=10).read()

? ? ? ? plain_text = source_code.decode('utf-8');

? ? ? ? soup = BeautifulSoup(plain_text,"html.parser")

? ? except (urllib.request.HTTPError, urllib.request.URLError) as e:

? ? ? ? print(e)

? ? ? ? exception_write('xiaoqu_chengjiao_spider', xq_url)

? ? ? ? return

? ? except Exception as e:

? ? ? ? print(e)

? ? ? ? exception_write('xiaoqu_chengjiao_spider', xq_url)

? ? ? ? return

? ? content = soup.find('div', {'class': 'page-box house-lst-page-box'})

? ? total_pages = 0

? ? if content:

? ? ? ? d = "d=" + content.get('page-data')

? ? ? ? loc = {}

? ? ? ? glb = {}

? ? ? ? exec(d, glb, loc);

? ? ? ? total_pages = loc['d']['totalPage']


? ? print(u"xiaoqu %s chengjiao totalpage %d" % (xq_name,total_pages));

? ? threads = []

? ? for i in range(total_pages):

? ? ? ? tmp= u'chengjiao/pg%dc'% (i + 1)

? ? ? ? url_page = url.replace('chengjiao/c',tmp);

? ? ? ? t = threading.Thread(target=chengjiao_spider, args=(db_cj, url_page))

? ? ? ? threads.append(t)

? ? for t in threads:

? ? ? ? t.start()

? ? for t in threads:

? ? ? ? t.join()


爬取單個頁面內的成交記錄信息:

def chengjiao_spider(db_cj, url_page=u"https://nj.lianjia.com/chengjiao/pg4c1411000000142/"):

? ? """

? ? 爬取頁面鏈接中的成交記錄

? ? """

? ? print(u"爬取頁面%s成交記錄" % url_page);

? ? try:

? ? ? ? req = urllib.request.Request(url_page, headers=hds[random.randint(0, len(hds) - 1)])

? ? ? ? source_code = urllib.request.urlopen(req, timeout=10).read()

? ? ? ? plain_text = source_code.decode('utf-8');

? ? ? ? soup = BeautifulSoup(plain_text,"html.parser")

? ? except (urllib.request.HTTPError, urllib.request.URLError) as e:

? ? ? ? print(e)

? ? ? ? exception_write('chengjiao_spider', url_page)

? ? ? ? return

? ? except Exception as e:

? ? ? ? print(e)

? ? ? ? exception_write('chengjiao_spider', url_page)

? ? ? ? return


? ? recodenum = 0;

? ? cjs = soup.find('ul', {'class': 'listContent'});

? ? cj_list = cjs.findAll('li', {})

? ? for cj in cj_list:

? ? ? ? info_dict = {}

? ? ? ? title = cj.find('div', {'class': 'title'});

? ? ? ? houseInfo = cj.find('div', {'class': 'houseInfo'});

? ? ? ? dealDate = cj.find('div', {'class': 'dealDate'});

? ? ? ? totalPrice = cj.find('div', {'class': 'totalPrice'});

? ? ? ? positionInfo = cj.find('div', {'class': 'positionInfo'});

? ? ? ? source = cj.find('div', {'class': 'source'});

? ? ? ? unitPrice = cj.find('div', {'class': 'unitPrice'});

? ? ? ? dealHouseInfo = cj.find('div', {'class': 'dealHouseInfo'});

? ? ? ? dealCycleeInfo = cj.find('div', {'class': 'dealCycleeInfo'});


? ? ? ? href = title.find('a')

? ? ? ? if not href:

? ? ? ? ? ? continue

? ? ? ? info_dict.update({u'鏈接': href.attrs['href']})

? ? ? ? content = title.text.split()

? ? ? ? if content:

? ? ? ? ? ? info_dict.update({u'小區名稱': content[0]})

? ? ? ? ? ? info_dict.update({u'戶型': content[1]})

? ? ? ? ? ? info_dict.update({u'面積': content[2]})


? ? ? ? content = houseInfo.text.split('|') #unicode(cj.find('div', {'class': 'con'}).renderContents().strip())

? ? ? ? if content:

? ? ? ? ? ? info_dict.update({u'朝向': content[0].strip()})

? ? ? ? ? ? if len(content) >= 2:

? ? ? ? ? ? ? ? info_dict.update({u'裝修': content[1].strip()})

? ? ? ? ? ? if len(content) >= 3:

? ? ? ? ? ? ? ? info_dict.update({u'電梯': content[2].strip()})


? ? ? ? info_dict.update({u'簽約時間': dealDate.text})

? ? ? ? info_dict.update({u'簽約總價': totalPrice.text}) #注意值

? ? ? ? content = positionInfo.text.split()

? ? ? ? if len(content) >= 2:

? ? ? ? ? ? info_dict.update({u'樓層': content[0].strip()})?

? ? ? ? ? ? info_dict.update({u'年代樓型': content[1].strip()})??

? ? ? ? else:

? ? ? ? ? ? info_dict.update({u'樓層': content[0].strip()})??


? ? ? ? info_dict.update({u'來源': source.text})

? ? ? ? info_dict.update({u'簽約單價': unitPrice.text}) #可能為*

? ? ? ? #content = dealHouseInfo.text.split()

? ? ? ? if dealHouseInfo != None:

? ? ? ? ? ? for span in dealHouseInfo.find('span', {'class': 'dealHouseTxt'}).findAll('span'):

? ? ? ? ? ? ? ? if span.text.find(u'房屋') != -1:

? ? ? ? ? ? ? ? ? ? info_dict.update({u'稅費': span.text})? # 滿幾年

? ? ? ? ? ? ? ? elif span.text.find(u'距') != -1:

? ? ? ? ? ? ? ? ? ? info_dict.update({u'地鐵': span.text})


? ? ? ? #content = dealCycleeInfo.text.split()

? ? ? ? if dealCycleeInfo != None:

? ? ? ? ? ? for span in dealCycleeInfo.find('span',{'class': 'dealCycleTxt'}).findAll('span'):

? ? ? ? ? ? ? ? if span.text.find(u'掛牌') != -1:

? ? ? ? ? ? ? ? ? ? info_dict.update({u'掛牌價': span.text})

? ? ? ? ? ? ? ? elif span.text.find(u'成交周期') != -1:

? ? ? ? ? ? ? ? ? ? info_dict.update({u'成交周期': span.text})


? ? ? ? command = gen_chengjiao_insert_command(info_dict)


? ? ? ? db_cj.execute(command, 1)

? ? ? ? recodenum += 1;

? ? print(u"爬取頁面%s成交記錄%d條" % (url_page,recodenum));



爬取的成交記錄信息將被存儲到數據庫表中。




整個爬取過程還是很快的,在爬取完小區、在售、成交三類信息之后,就可以拿這些數據去進行想要做的分析了。


長按進行關注。


總結

以上是生活随笔為你收集整理的如何高效地爬取链家的房源信息(四)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

歡迎分享!

轉載請說明來源于"生活随笔",并保留原作者的名字。

本文地址:如何高效地爬取链家的房源信息(四)

主站蜘蛛池模板: 青青青在线视频 | 欧美做爰全过程免费观看 | 成人免费毛片网 | www.99爱| 苍井空亚洲精品aa片在线播放 | 2018天天干天天操 | 久久久人妻无码一区二区 | 看片久久| 国产午夜电影在线观看 | 婷婷六月激情 | 欧美日韩人妻精品一区二区三区 | 综合激情婷婷 | 欧美一区二区二区 | 国语精品| 日韩精品一区二区三区视频在线观看 | 中文字幕素人 | 黄色a在线 | 狠狠操狠狠操狠狠操 | 午夜在线视频免费 | 浪漫樱花在线观看高清动漫 | 日日骑夜夜操 | 国产97色在线 | 日韩 | 美女激情网站 | zjzjzjzjzj亚洲女人 | 亚洲色图日韩精品 | 中文天堂在线观看 | 精品成人网 | 黄色字幕网| 法国空姐电影在线观看 | 在线观看日韩中文字幕 | 男女免费看 | 亚洲精品欧美精品 | 成人av自拍 | 欧美.com| 精品人妻码一区二区三区红楼视频 | 成人日韩av| 又欲又污又肉又黄短文 | 欧美黄色大片在线观看 | 天天操天天干天天干 | 91午夜交换视频 | 免费在线不卡av | 黄色小视频免费网站 | 国产精品久久在线 | 久久亚洲中文字幕无码 | 视频二区中文字幕 | 黄色三级免费观看 | 成人欧美一区 | 国产不雅视频 | 日韩国产91 | 午夜伦伦 | 超碰影院在线 | 成人性生交大片免费看96 | 中文字幕一区二区在线视频 | 亚洲国产福利视频 | 挪威xxxx性hd极品 | heyzo久久 | 亚洲一区二区三区欧美 | 不卡一区在线 | 少女视频的播放方法 | 国产精品偷伦视频免费观看了 | 国产色频| 日韩久久一区二区三区 | 久久久久在线视频 | 婷婷五月综合久久中文字幕 | 久久经典视频 | 日韩精品电影一区二区 | 欧美xxxxxxxxx | 国产精品一级无码 | 中文字幕av久久爽一区 | 樱花影院最新免费观看攻略 | 成人h视频在线观看 | 秘密基地在线观看完整版免费 | 人人爱爱人人 | 一卡二卡三卡在线视频 | 黑帮大佬和我的365日第二部 | 国产精品久久久久999 | 亚洲精品久久夜色撩人男男小说 | 久久久久亚洲色欲AV无码网站 | 日本性xxxxx| 水蜜桃91| 丰满少妇在线观看网站 | 国产专区在线视频 | 国产日日日 | 成年人网站黄 | 国产aⅴ精品| 亚州国产精品 | 91精品视频免费观看 | 国产日韩av在线 | 国产美女主播在线 | 伊人亚洲影院 | 福利一区在线观看 | 国产无遮挡呻吟娇喘视频 | 国产一级爽片 | 国产另类xxxxhd高清 | 色久月 | 草草在线观看 | 午夜一区二区三区在线 | 六月婷婷激情 | 国产成人在线视频 |