爬取鏈家所有二手房信息,并存入python自帶的sqlite3數(shù)據(jù)庫(kù)中,借鑒他人程序進(jìn)行編寫(xiě)
目的:1、繼續(xù)熟悉scrapy框架 2、數(shù)據(jù)數(shù)據(jù)庫(kù)操作
需求:爬取鏈家北京所有二手房信息,并存入sqlite3數(shù)據(jù)庫(kù)中
1、如何統(tǒng)計(jì)鏈家全部的二手房?
鏈家的二手房搜索只能搜索前3000項(xiàng),也就是100頁(yè),每頁(yè)30套,而鏈家上顯示北京在售的二手房信息共有27000套,所以只能設(shè)置選擇條件使得每種條件搜索下房屋套數(shù)小于3000套共一百頁(yè)。首先是考慮分區(qū)進(jìn)行選取,除了海淀、朝陽(yáng)區(qū)外其他區(qū)的在售二手房數(shù)量均小區(qū)三千,滿足條件。對(duì)于海淀和朝陽(yáng)超過(guò)3000套這種情況,可以再按照高中低樓層進(jìn)行條件設(shè)置,這樣使得按照樓層細(xì)分條件下的二手房套數(shù)也小于3000。



接下來(lái)就是scrapy的常規(guī)步驟了:
a、創(chuàng)建scrapy工程? ?b、定義item? ?c、設(shè)置start_urls d、編寫(xiě)parse方法 解析所有網(wǎng)址 e、編寫(xiě)parse_item方法提取item? f、 編寫(xiě)item pipeline存儲(chǔ)提到的item。現(xiàn)在一步步慢慢開(kāi)始
a)創(chuàng)建scrapy工程? 只能在命令行界面下創(chuàng)建? scrapy startproject lianjia,而后 cd lianjia,執(zhí)行scrapy genspider lianjiacrawler lianjia.com
b)定義item 主要提取了房屋信息的十項(xiàng)內(nèi)容 房屋編碼、售房簡(jiǎn)介、小區(qū)、房屋信息(幾居室、朝向、面積)、片區(qū)、關(guān)注數(shù)、帶看數(shù)、總價(jià)、均價(jià)。

c)設(shè)置start_urls start_urls列表是scrapy框架爬取網(wǎng)頁(yè)的起始網(wǎng)址,因?yàn)槲覀冞x了多個(gè)區(qū),所以其實(shí)網(wǎng)址是一個(gè)列表,較為特殊的是朝陽(yáng)和海淀是按照樓層細(xì)分。舉例如西城區(qū)的鏈家網(wǎng)址是https://bj.lianjia.com/ershoufang/xicheng/,而朝陽(yáng)區(qū)再按樓層細(xì)分的話,鏈家網(wǎng)址就會(huì)在最后面加上lcx的后綴,x為[1,2,3,4,5]中的一個(gè),舉例朝陽(yáng)區(qū)中樓層2904套,鏈家網(wǎng)址為https://bj.lianjia.com/ershoufang/chaoyang/lc2/,所以這里的start_urls設(shè)置如下所示

d)編寫(xiě)parse方法
此parse方法主要是為解析出每個(gè)start_urls起始地址里的后續(xù)地址,找出總共的頁(yè)數(shù),通過(guò)在chrome找到最大頁(yè)數(shù)右鍵點(diǎn)擊檢查啟動(dòng)chrome開(kāi)發(fā)工具,可直接定位到所在的elements


接下來(lái)就是提出去最大頁(yè)數(shù),采用response.xpath('//div[@class="page-box house-lst-page-box"]/@page-data').extract()[0])['totalPage'],可以將總頁(yè)數(shù)提取出來(lái),接下來(lái)就是形成每一頁(yè)的url然后yield給scrapy.Request函數(shù)
e)提取item,編寫(xiě)parse_item方法,總的思路就是采用xpath找到信息,然后存儲(chǔ)到lianjiaitem里,最后yield
f)在pipeline中持久化存儲(chǔ)
我選擇的是采用python自帶的sqlite數(shù)據(jù)庫(kù),也可以采用文件存儲(chǔ)方式,比如存儲(chǔ)在excel中等等。
首先就是創(chuàng)建數(shù)據(jù)庫(kù)啊表啊,字段啊,根據(jù)item共創(chuàng)建10個(gè)字段,然后執(zhí)行insert也沒(méi)什么好說(shuō)的了。
總的就是這樣,最后存儲(chǔ)到數(shù)據(jù)庫(kù)中28000套房屋。
全部的代碼在這里? ? https://github.com/bitmote/lianjia
拿到數(shù)據(jù)還不是最終目的而只是手段,最終結(jié)果是通過(guò)對(duì)數(shù)據(jù)的淘洗得到一些有趣的信息。比如北京現(xiàn)售的最貴的房子是下面這個(gè)

一億元的房子,最便宜的房子,用數(shù)據(jù)庫(kù)查詢是15萬(wàn),這么便宜?!當(dāng)然不是了,是車庫(kù)

看來(lái)數(shù)據(jù)還是有一些雜質(zhì)需要去偽存真。其實(shí)兩萬(wàn)多套房屋數(shù)據(jù),滿可以分析出一些有價(jià)值的信息來(lái)的。