王彥雅
摘要:隨著經(jīng)濟(jì)發(fā)展,全國房價(jià)不斷攀升,影響房價(jià)上漲的因素成為人們關(guān)注的焦點(diǎn)。以廊坊市為例,利用Python語言中的Scrapy爬蟲框架對(duì)鏈家網(wǎng)中廊坊市各區(qū)縣的二手房數(shù)據(jù)進(jìn)行爬取,并將爬取到的數(shù)據(jù)進(jìn)行清洗、可視化、分析,最后總結(jié)出影響廊坊市二手房房價(jià)的關(guān)鍵因素,對(duì)準(zhǔn)備購買廊坊市區(qū)房屋的剛需或者投資者起到輔助決策作用。
關(guān)鍵詞:Python;爬蟲;Scrapy;數(shù)據(jù)分析;可視化分析
中圖分類號(hào):TP391? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2021)29-0168-03
1背景
近年來,全國房價(jià)普遍上漲,導(dǎo)致許多人背負(fù)的房貸越來越重,很大程度降低了人們的生活水平。尤其是河北省的廊坊市,地理位置優(yōu)越,位于京津走廊之間,并且距離雄安新區(qū)僅有一百公里。價(jià)格上漲速度始終位居全國前列,這導(dǎo)致人們對(duì)住房的價(jià)格十分關(guān)注。許多投資者也來到廊坊市投資房屋,由于價(jià)格上漲較多,促使許多剛需者和投資者選擇了價(jià)格較低的二手房。
伴隨著大數(shù)據(jù)時(shí)代的到來,網(wǎng)絡(luò)中的數(shù)據(jù)信息愈來愈多,如何搜集、整理和分析有用的信息是目前面臨的難題。由此,網(wǎng)絡(luò)爬蟲應(yīng)運(yùn)而生。網(wǎng)絡(luò)爬蟲[1]又稱網(wǎng)絡(luò)機(jī)器人,它的主要任務(wù)是模仿人類瀏覽網(wǎng)頁,躲過網(wǎng)站反爬攔截,將瀏覽到的網(wǎng)頁信息存儲(chǔ)至本地,可以大幅降低人工成本。本文以鏈家網(wǎng)為例,使用網(wǎng)絡(luò)爬蟲自動(dòng)獲取廊坊市二手房信息,包括位置、面積、戶型、單價(jià)等,并對(duì)搜集的信息進(jìn)行可視化分析,以便探究廊坊市價(jià)格上漲背后的原因,對(duì)廊坊市二手房購買者提供一定的幫助。
2 Python及Scrapy爬蟲框架的簡介
Python作為一種解釋型的腳本語言在近些年的計(jì)算機(jī)領(lǐng)域頗受歡迎。并且它的應(yīng)用領(lǐng)域不僅局限于Web開發(fā)、后端開發(fā)和軟件開發(fā),更是在目前最為流行的大數(shù)據(jù)和人工智能領(lǐng)域有著舉足輕重的地位。Python 的崛起源于它有著龐大的第三方庫,通過模塊的引入,使得人們?cè)诰帉懞喴状a的同時(shí)能夠解決更多的難題。由于Python第三方庫的強(qiáng)大,這也使得利用 Python編寫爬蟲程序較為方便簡潔。
Scrapy框架[2]的開發(fā)基于Python語言,它是專門為網(wǎng)絡(luò)爬蟲所設(shè)計(jì)出來的第三方庫。Scrapy框架可以使用戶更容易的爬取大規(guī)模的數(shù)據(jù),它的自動(dòng)調(diào)節(jié)機(jī)制可以大幅提升爬取速度。
Scrapy框架包括七個(gè)部分:
1)引擎(Scrapy Engine):負(fù)責(zé)數(shù)據(jù)和信號(hào)在不同模塊間的傳遞(Scrapy 已實(shí)現(xiàn))。
2)調(diào)度器(Scheduler):將引擎?zhèn)魉瓦^來的request請(qǐng)求存儲(chǔ)到隊(duì)列中(Scrapy 已實(shí)現(xiàn))。
3)下載器(Downloader):下載引擎發(fā)過來的request請(qǐng)求,并返回給引擎(Scrapy 已實(shí)現(xiàn))。
4)爬蟲(Spider):將引擎發(fā)送來的response 中的數(shù)據(jù)和路徑提取,并返回給引擎(需手寫)。
5)管道(Item Pipeline):將引擎提取到的數(shù)據(jù)存儲(chǔ)到本地(需手寫)。
6)下載中間件(Downloader Middlewares):如設(shè)置下載代理等需求,可自行修改(可更改)。
7)Spider 中間件(Spider Middlewares):可將 requests 和 re?sponse中的請(qǐng)求自定義過濾(可更改)。
3數(shù)據(jù)爬取及函數(shù)介紹
本文使用的測(cè)試環(huán)境為 WINDOWS 10專業(yè)版,Pycharm 2020.1(專業(yè)版),Python 3.8.5,Scrapy 2.4.1。
3.1創(chuàng)建項(xiàng)目
首先創(chuàng)建此次爬取程序的項(xiàng)目文件,在 Windows Power? Shell 中輸入 scrapy startprojectlflianjiascrapy創(chuàng)建項(xiàng)目文件,自動(dòng)生成scrapy框架文件,其中l(wèi)flianjiascrapy為項(xiàng)目名稱。爬蟲框架生成后,進(jìn)入lflianjiascrapy文件夾,輸入 scrapy genspiderLFLianJia lf.lianjia.com/ershoufang生成爬蟲文件,其中LFLian? Jia為爬蟲名字,lf.lianjia.com/ershoufang為允許爬取的域名。
3.2主要函數(shù)功能介紹
Input()函數(shù)是 python 中用于手動(dòng)輸入數(shù)據(jù)的內(nèi)置函數(shù)。 Requests庫是爬蟲中非常重要的庫,其功能是將網(wǎng)頁中的源代碼返回至本地,為提取網(wǎng)頁數(shù)據(jù)提供了先決條件。Xpath方法可以尋找網(wǎng)頁源代碼中的標(biāo)簽及標(biāo)簽屬性值,也可以使用/text()提取標(biāo)簽對(duì)之間的文本內(nèi)容,是提取網(wǎng)頁內(nèi)容的重要方法。
3.3網(wǎng)頁解析
本文想要獲取鏈家網(wǎng)[3]中廊坊市各區(qū)縣的房屋數(shù)據(jù),使用谷歌瀏覽器訪問鏈家網(wǎng),并檢索廊坊市,發(fā)現(xiàn)一共有8個(gè)區(qū),其中永清區(qū)的房屋數(shù)量過少,不具有參考價(jià)值,故將其忽略。其他每個(gè)區(qū)的房子共展示3000條,并被成10頁展示。所需要的房屋數(shù)據(jù)信息均在網(wǎng)頁源碼中存在。若要獲取每個(gè)房屋的信息需進(jìn)入每個(gè)房屋址,而且要進(jìn)行29次翻頁操作,經(jīng)觀察發(fā)現(xiàn)每頁地址僅有“page=”后的參數(shù)不同且遵循一定規(guī)律,即從1逐漸增加至30。故使用循環(huán)訪問每一條數(shù)據(jù)的地址和進(jìn)行翻頁操作。
3.4訪問網(wǎng)頁
從Pycharm進(jìn)入創(chuàng)建的LFLianJia.py文件,使用input()函數(shù)手動(dòng)輸入起始鏈接地址。復(fù)制第一頁地址,使用requests庫訪問,由于鏈家網(wǎng)存在一定的反爬功能,故在settings.py文件中將默認(rèn)請(qǐng)求頭修改成瀏覽器的請(qǐng)求頭,并設(shè)置獲取網(wǎng)頁信息的時(shí)間間隔,即可繞過反爬檢測(cè)。利用循環(huán)實(shí)現(xiàn)訪問每條房源的地址和進(jìn)行29次翻頁操作,并將網(wǎng)頁源代碼使用 response 變量接收。
3.5解析數(shù)據(jù)
分析response 中的網(wǎng)頁源代碼結(jié)構(gòu),其中包含了每個(gè)房屋的面積、戶型、朝向等數(shù)據(jù),故將其中所需要的信息進(jìn)行提取即可。Xpath方法可以查找網(wǎng)頁源碼中的信息,將其進(jìn)行遍歷、定位和獲取。使用Xpath方法獲取網(wǎng)頁源代碼中的標(biāo)簽屬性值和文本內(nèi)容。分析源碼中所需數(shù)據(jù)的位置后,使用相應(yīng)的表達(dá)式可以將數(shù)據(jù)提取至本地。
3.6存儲(chǔ)數(shù)據(jù)
爬蟲內(nèi)部結(jié)構(gòu)完成后,在piplines.py文件中定義一個(gè)管道類,重寫process_item方法,并且使用正則表達(dá)式re.sub()函數(shù)進(jìn)行數(shù)據(jù)清洗,將數(shù)據(jù)中的空白值刪除。在settings.py 中啟用該管道類,完成所有代碼后回到Windows PowerShell 中,輸入scra?py crawl LFLianJia,再手動(dòng)輸入起始頁的地址運(yùn)行爬蟲程序。最后獲取的數(shù)據(jù)將生成一個(gè).csv文件存儲(chǔ)到本地。由于直接打開.csv文件會(huì)導(dǎo)致數(shù)據(jù)亂碼情況,故新建一個(gè).xlsx文件,將.? csv 文件中的數(shù)據(jù)全部導(dǎo)入至.xlsx 文件中,部分?jǐn)?shù)據(jù)如圖1 所示。
4數(shù)據(jù)的可視化及分析
數(shù)據(jù)可視化[4-5]是將數(shù)據(jù)由文本形式轉(zhuǎn)化成圖表形式,使人們更直觀地觀察到數(shù)據(jù)之間的關(guān)系及變化情況,在數(shù)據(jù)分析中有著重要意義。本文使用matplotlib、numpy和pandas庫[6]相結(jié)合的方式將爬取到的二手房數(shù)據(jù)進(jìn)行可視化分析。包括廊坊市各區(qū)縣二手房的單價(jià)與總價(jià)的比較、面積與總價(jià)的關(guān)系和戶型占比。并繪制成條形圖、餅圖和散點(diǎn)圖。本次爬取到七個(gè)區(qū)縣共計(jì)18362條數(shù)據(jù)。其中包括每個(gè)房屋的標(biāo)題、小區(qū)名稱、戶型、面積、朝向、裝修、樓層、結(jié)構(gòu)、單價(jià)和總價(jià)。
4.1廊坊市各區(qū)縣二手房均價(jià)比較
房地產(chǎn)行業(yè)在中國的經(jīng)濟(jì)占比中有著非常重要的作用,全國房地產(chǎn)開發(fā)投資占固定資產(chǎn)投資總額的20%,占國內(nèi)生產(chǎn)總值近10%,已成為國內(nèi)需求的重要組成部分。而且房地產(chǎn)還是地方政府財(cái)政收入的重要來源,2019年全國商品房的銷售額突破了19萬億,創(chuàng)造了歷史新高。由圖2和圖3可以看出,廊坊市二手房平均單價(jià)和總價(jià)最高的是燕郊和大廠。平均單價(jià)為17000元/平米和14000元/平米。平均總價(jià)達(dá)到了164萬元和162萬元。其他區(qū)縣的單價(jià)在10000-13000元不等??們r(jià)在94-133萬元不等。由于燕郊擁有直達(dá)北京的地鐵站,大廠也緊鄰燕郊,所以越來越多的北京打工者們選擇了居住在燕郊和大廠,這也直接導(dǎo)致了燕郊和大廠的房價(jià)穩(wěn)居前列。平均單價(jià)和總價(jià)最低的是固安和香河。平均單價(jià)為11000元/平米和9900元/平米。平均總價(jià)為107萬元和94萬元。由于固安和香河距離北京和廊坊市區(qū)較遠(yuǎn),并且人流量較少,故而房價(jià)較低。
4.2廊坊市二手房戶型占比
通過圖4 可以看出,廊坊市在售二手房中一室一廳占4.3%,兩室一廳占 27.2%,兩室兩廳占 21.7%,三室一廳占 15.0%,三室兩廳占26.5%,而四室及以上的房屋占有量僅為5.3%。說明兩室和三室的戶型在市場(chǎng)中占據(jù)了主導(dǎo)地位,總共占所有房型的90.4%。直觀表明了目前絕大多數(shù)家庭所住的房屋為兩室或三室。而四室及以上的大型房屋的持有量較低,說明市場(chǎng)保有量不高,流動(dòng)性也相對(duì)較小。
圖5是房屋面積與總價(jià)之間關(guān)系的散點(diǎn)圖,可以看出隨著房屋面積的增加,價(jià)格也在隨之上升,兩者總體上呈正相關(guān)。散點(diǎn)在60-150平米之間且價(jià)格在50-200萬元之間的數(shù)量最密集,說明面積60-150平米且價(jià)格在50-200萬元之間的房屋持有量最高,市場(chǎng)流動(dòng)性最大。60-150平米之間的房屋基本都是兩室或三室,也驗(yàn)證了兩室和三室在二手房市場(chǎng)中占據(jù)主要地位這一結(jié)論。
5結(jié)束語
爬蟲技術(shù)是目前獲取大量網(wǎng)頁信息最重要的方法之一,在目前這個(gè)大數(shù)據(jù)流行的時(shí)代,更是凸顯其重要性。本文運(yùn)用爬蟲和可視化技術(shù)在鏈家網(wǎng)中將廊坊市各區(qū)縣的二手房信息進(jìn)行獲取與可視化分析。分析可得,廊坊市在售二手房中兩室和三室的戶型占比最大,占到了90.4%,且價(jià)格區(qū)間基本在60-150萬元之間。距離北京最近的燕郊和大廠的房價(jià)最高,均價(jià)基本在16000元左右,說明地理位置對(duì)于廊坊市的房價(jià)起著極其重要的性作用。
參考文獻(xiàn):
[1]莊禮金,戴澤鑫. 網(wǎng)絡(luò)爬蟲的設(shè)計(jì)與實(shí)現(xiàn)[J].信息技術(shù)與信息化,2020(12):47-49.
[2]鄒維,李廷元.基于Scrapy爬蟲框架的領(lǐng)域網(wǎng)站文件爬取[J].現(xiàn)代信息科技,2020,4(21):6-9.
[3]戴瑗,鄭傳行.基于Python 的南京二手房數(shù)據(jù)爬取及分析[J].計(jì)算機(jī)時(shí)代,2021(1):37-40,45.
[4]邱俊杰.基于Python定向爬蟲技術(shù)對(duì)微博數(shù)據(jù)可視化設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2020,16(22):43-44,47.
[5]熊暢.基于Python爬蟲技術(shù)的網(wǎng)頁數(shù)據(jù)抓取與分析研究[J].數(shù)字技術(shù)與應(yīng)用,2017(9):35-36.
[6]宋永生,黃蓉美,王軍.基于Python 的數(shù)據(jù)分析與可視化平臺(tái)研究[J].現(xiàn)代信息科技,2019,3(21):7-9.
【通聯(lián)編輯:謝媛媛】