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

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

準備工做

首先是開始抓取前準備工做,導入須要使用的庫文件,這裏主要使用的是requests和BeautifulSoup兩個。Time庫負責設置每次抓取的休息時間。這裏並不是所有,後續還會在過程當中導入新的庫。python

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大數據

完成頁面解析後就能夠對頁面中的關鍵信息進行提取了。下面咱們分別對房源的總價,房源信息和關注度三部分進行提取。url

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

36大數據

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

36大數據

建立數據表並清洗數據

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

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

相關文章
相關標籤/搜索