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