使用python抓取並分析數據—鏈家網(requests+BeautifulSoup)(轉)


本篇文章是使用python抓取數據的第一篇,使用requests+BeautifulSoup的方法對頁面進行抓取和數據提取。通過使用requests庫對鏈家網二手房列表頁進行抓取,通過BeautifulSoup對頁面進行解析,並從中獲取房源價格,面積,戶型和關注度的數據。

准備工作

首先是開始抓取前准備工作,導入需要使用的庫文件,這里主要使用的是requests和BeautifulSoup兩個。Time庫負責設置每次抓取的休息時間。這里並非全部,后續還會在過程中導入新的庫。

36大數據

抓取列表頁

開始抓取前先觀察下目標頁面或網站的結構,其中比較重要的是URL的結構。鏈家網的二手房列表頁面共有100個,URL結構為http://bj.lianjia.com/ershoufang/pg9/,其中bj表示城市,/ershoufang/是頻道名稱,pg9是頁面碼。我們要抓取的是北京的二手房頻道,所以前面的部分不會變,屬於固定部分,后面的頁面碼需要在1-100間變化,屬於可變部分。將URL分為兩部分,前面的固定部分賦值給url,后面的可變部分使用for循環。

36大數據

此外,還需要在很http請求中設置一個頭部信息,否則很容易被封。頭部信息網上有很多現成的,也可以使用httpwatch等工具來查看。具體細節按照具體情況進行調整。

36大數據

使用for循環生成1-100的數字,轉化格式后與前面的URL固定部分拼成要抓取的URL。這里我們設置每兩個頁面間隔0.5秒。抓取到的頁面保存在html中。

36大數據

解析頁面並提取信息

頁面抓取完成后無法直接閱讀和進行數據提取,還需要進行頁面解析。我們使用BeautifulSoup對頁面進行解析。變成我們在瀏覽器查看源代碼中看到的樣子。

36大數據

完成頁面解析后就可以對頁面中的關鍵信息進行提取了。下面我們分別對房源的總價,房源信息和關注度三部分進行提取。

把頁面div標簽中class=priceInfo的部分提取出來,並使用for循環將其中每個房源的總價數據存在tp中。

36大數據

提取房源信息和關注度的方法與提取房源價格的方法類似,下面是具體的代碼,房源信息存儲在hi中,關注度存儲在fi中。

36大數據

創建數據表並清洗數據

導入pandas庫將前面提取的房源總價,和關注度等信息進行匯總生成數據表。便於后面的分析。

36大數據

前面提取的都只是信息,還不能直接使用,在分析前要對這些信息進行數據提取和清洗等工作。如房源信息,在表中每個房源的小區名稱,戶型,面積,朝向等信息都在一個字段中,無法直接使用。需要先進行分列操作。這里的規則比較明顯,每個信息間都是以豎線分割的,因此我們只需要以豎線進行分列即可。

36大數據

這是完成分列后的新數據表,房源的各種信息以及成為單獨的字段。

36大數據

將分列后的新數據表在重新拼接回原有的數據表中,這樣在后面的分析過程中可以與其他字段的信息配合使用。

36大數據

完成拼接后的數據表中既包含了原有字段,也包含了分列后的新增字段。

36大數據

使用相同的方法對房源關注度字段進行分列和拼接操作。這里的分列規則是斜杠。

36大數據

房源戶型分布情況

前面我們經過對房源信息的分列獲取了房源的朝向,戶型等信息,這里我們對房源的戶型情況進行匯總,看看北京在售二手房的戶型分布情況。

首先按房源的戶型對房源數量進行匯總,下面是具體的代碼和結果。

36大數據

導入數值計算庫mumpy對數據進行處理,並使用matplotlib繪制房源戶型分布條形圖。

36大數據

36大數據

北京在售二手房中戶型從1室0廳到7室3廳近20種分布廣泛。在所有的戶型中數量最多的是2室1廳,其次為3室1廳和3室2廳,以及2室2廳。較小的1室1廳數量也較多。較大的戶型數量較少。另外,從在售戶型的分布中我們也可以推測出售房人的一些情況。

36大數據

房源面積分布情況

在數據表中,房源面積通過分列以及單獨提取出來,但數字與中文的格式並不能直接使用。我們還需要對房源面積字段進行二次分列處理,提取出面積的數值。方法與前面的分列方法類似,我們使用“平”作為分列規則對房源面積進行二次分列。並將分列后的結果拼接回原數據表中。

36大數據

分列后的數據在使用前還需要進行清洗,通常的操作包括去除空格和格式轉換。下面我們先對房源面積的值去除兩端的空格,然后更改數值的格式以方便后面的計算。

36大數據

清洗后的房源面積字段可以開始分析了。首先查看所有北京在售二手房的面積范圍,下面是代碼和結果。房源面積從18.85到332.63。

36大數據

有了房源面積的范圍后,就可以對面積進行分組了,我們以50為區間將房源面積分為7組。並統計所有房源在這7組中的分布情況。

36大數據

使用房源面積分組字段對房源數量進行分組並繪制條形圖。

36大數據

在所有房源中,數量最多的是50-100,其次為100-150。隨着面積增加數量減少。小於50的小面積房源也有一定數量的房源。

 

%e6%88%bf%e6%ba%90%e9%9d%a2%e7%a7%af%e5%88%86%e5%b8%83

 

房源關注度分布情況

房源關注度的情況與房源面積類似,第一次分列處理后得到的數據包含數字和中文,無法直接使用,需要再次通過分列處理提取關注度的數值,並對數值進行清洗和格式轉換。下面是具體的代碼。

36大數據

清洗完后查看所有房源關注度的區間,關注度從0到725。也就是說有些房子很熱門,而有些房子沒有人關注。這可能和房源上線和更新的情況有關,此外還要考慮房源的銷售速度,熱門房源可能很搶手,剛上線就成交了。因此我們對情況進行簡化,暫時忽略掉這些復雜的情況。僅對關注度的分布情況進行統計。

36大數據

將關注度以100為區間分為8組,並按關注度區間進行匯總統計房源數量。查看在售房源的關注度分布情況。

36大數據

繪制房源關注度分布條形圖。

36大數據

在3000個房源中,近2500個房源的關注度小於100,關注度大於400的房源則較少。這里需要再次說明的是關注度數據無法准確的表示房源的熱門程度。熱門房源可能由於出售速度快而關注度較少。因此關注度數據僅供參考。

36大數據

房源聚類分析

最后,我們對所有在售房源按總價,面積和關注度進行聚類分析。將在售房源按總價,面積和關注度的相似性分在不同的類別中。

36大數據

通過計算我們將在售房源分為三個類別,下面是每個類別的中心點坐標。

36大數據

根據三個類別在總價,面積和關注度三個點的中心坐標,我們將在售房源分為三個類別,第一個類別是總價低,面積低,關注度高的房源。第二個類別是總價居中,面積居中,關注度居中的類別。第三個類別是總價高,面積高,關注度低的類別。

從營銷和用戶體驗的角度來看,在廣告和列表頁的默認排序中應該給予總價400萬,面積80屬性的房源更高的權重。這個類別的房源可以吸引最多的用戶關注。

熱心小伙伴提供代碼示例:鏈接:http://pan.baidu.com/s/1skSlVUt 密碼:igvv

End.

轉載請注明來自36大數據(36dsj.com)

http://www.36dsj.com/archives/71046


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM