使用python抓取並分析資料—鏈家網(requests+BeautifulSoup)

來源:互聯網
上載者:User

標籤:使用者   相同   使用者體驗   upload   類別   tag   不能   檔案   soup   

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

準備工作

首先是開始抓取前準備工作,匯入需要使用的庫檔案,這裡主要使用的是requests和BeautifulSoup兩個。Time庫負責設定每次抓取的休息時間。這裡並非全部,後續還會在過程中匯入新的庫。

抓取列表頁

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

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

使用for迴圈產生1-100的數字,轉化格式後與前面的URL固定部分拼成要抓取的URL。這裡我們設定每兩個頁面間隔0.5秒。抓取到的頁面儲存在html中。

解析頁面並提取資訊

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

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

把頁面div標籤中class=priceInfo的部分提取出來,並使用for迴圈將其中每個房源的總價資料存在tp中。

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

建立資料表並清洗資料

匯入pandas庫將前面提取的房源總價,和關注度等資訊進行匯總產生資料表。便於後面的分析。

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

這是完成分列後的新資料表,房源的各種資訊以及成為單獨的欄位。

將分列後的新資料表在重新拼接回原有的資料表中,這樣在後面的分析過程中可以與其他欄位的資訊配合使用。

完成拼接後的資料表中既包含了原有欄位,也包含了分列後的新增欄位。

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

房源戶型分布情況

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

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

匯入數值計算庫mumpy對資料進行處理,並使用matplotlib繪製房源戶型分布橫條圖。

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

房源面積分布情況

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

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

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

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

使用房源面積分組欄位對房源數量進行分組並繪製橫條圖。

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

 

 

房源關注度分布情況

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

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

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

繪製房源關注度分布橫條圖。

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

房源群集

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

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

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

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

熱心小夥伴提供程式碼範例:連結:http://pan.baidu.com/s/1skSlVUt 密碼:igvv

End.

轉載請註明來自36大資料(36dsj.com)

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

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.