Python爬蟲 —3000+條北京二手房數(shù)據(jù)可視化分析

哈嘍窜觉,我是小張,大家好久不見啊~

最近呢,對鏈家平臺上的北京二手房數(shù)據(jù)做了個(gè)可視化分析,對目前北京的二手房交易情況有了個(gè)大致了解丁逝,最終得到一個(gè)很實(shí)在的結(jié)論:奮斗一輩子也買不到一個(gè)廁所這句話不是騙人的,是真的艾蓝;關(guān)于具體分析內(nèi)容客官請看下文

1骨望,工具說明

本文用到的 Python 庫有

pandas
re
requests
json
pyecharts
folium
random
stylecloud
jieba
pyquery
fake_useragent
time

外加 百度地圖 API

2,數(shù)據(jù)采集

所有數(shù)據(jù)來源于鏈家二手房交易平臺爸黄,上面每頁排列 30 條二手房數(shù)據(jù)滞伟,本文采集了前 100 頁 數(shù)據(jù),每條二手房交易數(shù)據(jù)中提取 標(biāo)題炕贵、單價(jià)梆奈、價(jià)格、地址称开、年份亩钟、房間樣式 等字段作為可視化分析的數(shù)據(jù)來源

s

網(wǎng)站沒有設(shè)置很強(qiáng)的反爬機(jī)制, 爬取時(shí)用的是 requests + Cookies+ PyQuery 組合即可鳖轰,最好在爬取時(shí)加條 time.sleep() 命令清酥,隔幾秒休眠一次,代碼如下:


import requests
from pyquery import PyQuery as pq
from fake_useragent import UserAgent
import time
import random
import pandas as pd


UA = UserAgent()
headers = {
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'Cookie': '你的Cookie',
'Host': 'bj.lianjia.com',
'Referer': 'https://bj.lianjia.com/ershoufang/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36',
}
num_page = 2
class Lianjia_Crawer:
 def __init__(self,txt_path):
 super(Lianjia_Crawer,self).__init__()
 self.file = str(txt_path)
 self.df = pd.DataFrame(columns = ['title','community','citydirct','houseinfo','dateinfo','taglist','totalprice','unitprice'])


 def run(self):
 '''啟動(dòng)腳本'''
 for i in range(100):
 url = "https://bj.lianjia.com/ershoufang/pg{}/".format(str(i))
 self.parse_url(url)
 time.sleep(random.randint(2,5))
 print('正在爬取的 url 為 {}'.format(url))
 print('爬取完畢T搪隆Q媲帷!@ト浮H柚尽!D臁]┢怠!?透浴P翊印!3≈佟和悦!')
 self.df.to_csv(self.file,encoding='utf-8')
 def parse_url(self,url):

 headers['User-Agent'] = UA.chrome
 res = requests.get(url, headers=headers)
 doc = pq(res.text)
 for i in doc('.clear.LOGCLICKDATA .info.clear'):
 try:
 pq_i = pq(i)
 title = pq_i('.title').text().replace('必看好房', '')
 Community = pq_i('.flood .positionInfo a').text()

 HouseInfo = pq_i('.address .houseInfo').text()
 DateInfo = pq_i('.followInfo').text()
 TagList = pq_i('.tag').text()
 TotalPrice = pq_i('.priceInfo .totalPrice').text()
 UnitPrice = pq_i('.priceInfo .unitPrice').text()
 CityDirct = str(Community).split(' ')[-1]
 Community = str(Community).split(' ')[0]
 data_dict ={
 'title':title,
 'community':Community,
 'citydirct':CityDirct,
 'houseinfo':HouseInfo,
 'dateinfo':DateInfo,
 'taglist':TagList,
 'totalprice':TotalPrice,
 'unitprice':UnitPrice
 }
 print(Community,CityDirct)
 self.df = self.df.append(data_dict,ignore_index=True)
 #self.file.write(','.join([title, Community, CityDirct, HouseInfo, DateInfo, TagList, TotalPrice, UnitPrice]))
 print([title, Community, CityDirct, HouseInfo, DateInfo, TagList, TotalPrice, UnitPrice])
 except Exception as e:
 print(e)
 print("索引提取失敗,請重試G啤8胨亍!R嗔邸b珊觥0艋怠!T馑瘛0用帷!M吆簟N箍摺!")



if __name__ =="__main__":
 txt_path = "ershoufang_lianjia.csv"
 Crawer = Lianjia_Crawer(txt_path)
 Crawer.run() # 啟動(dòng)爬蟲腳本</pre>

最終一共采集到 3000 條數(shù)據(jù):

image-20210303001131288

3央串,地址經(jīng)緯度坐標(biāo)轉(zhuǎn)換

獲取到的數(shù)據(jù)是地址是字符串形式(例如梵谷水郡*酒仙橋)磨澡,后面地圖位置標(biāo)記時(shí)需要經(jīng)緯度數(shù)據(jù),需要把所有地址轉(zhuǎn)化為經(jīng)緯度坐標(biāo)质和,這里借助了百度地圖 API 完成這步操作

3.1 百度地圖 AK 申請

API 的使用需要在 百度地圖開放平臺 申請一個(gè) AK 效驗(yàn)碼稳摄,網(wǎng)址:https://lbsyun.baidu.com/apiconsole/center#/home,登錄自己的百度賬號饲宿,在控制臺創(chuàng)建一個(gè)應(yīng)用厦酬,

控制臺面板-> 我的應(yīng)用-> 創(chuàng)建應(yīng)用

image-20210303002409666

其他參數(shù)默認(rèn),應(yīng)用名稱自定義命名即可褒傅,IP 白名單填入 0.0.0.0/0弃锐,點(diǎn)擊提交

image-20210303002603013

以上步驟操作完之后,控制臺面板會多出一個(gè)應(yīng)用殿托,就是剛剛我們建立的霹菊,

image-20210303002750852

3.2 地址經(jīng)緯度坐標(biāo)轉(zhuǎn)換

獲取到你的 AK 參數(shù)之后,把 AK 和 address(中文地址) 作為參數(shù)傳入下面函數(shù)中支竹,就能獲取到對應(yīng)的經(jīng)緯度坐標(biāo)

def get_location(address,AK):
 #根據(jù)地址轉(zhuǎn)化為經(jīng)緯度
 try:
 url = 'http://api.map.baidu.com/geocoding/v3/?address={}&output=json&ak={}&callback=showLocation'.format(address,AK)
 res_test = requests.get(url).text
 res = re.search('\((.*?)\)', res_test).group(0).strip('(').strip(')')
 lng = json.loads(res)['result']['location']['lng']
 lat = json.loads(res)['result']['location']['lat']
 print(lng, lat)
 return lng, lat
 except Exception as e:
 print('error ---------\n')
 return None

百度地圖 API 的 地址經(jīng)緯度轉(zhuǎn)換 功能 定位不僅僅局限于省旋廷、市,還能定位到門牌號礼搁,只要你提供的地址越詳細(xì)饶碘,獲取的經(jīng)緯度信息越準(zhǔn)確

image-20210303003638193

4,可視化分析

這一部分進(jìn)入可視化分析內(nèi)容馒吴,城市畢竟是北京么所以首要的就是關(guān)注房價(jià)問題扎运,在抓取的數(shù)據(jù)中,最高的將近19萬+/每平方饮戳,最低的僅有 1.5 萬/每平方

image-20210303004058082

我看到 1.5 萬每平方就不淡定了豪治,這數(shù)據(jù)肯定有貓膩(北京房價(jià)按常理不可能這么低);為了驗(yàn)證想法扯罐,首先做了房產(chǎn)地段標(biāo)記(經(jīng)緯度地圖標(biāo)記借助百度地圖地址 相關(guān) Demo )

先看一下排名前十的:

image-20210303005302868
image-20210303005802821

上面是房價(jià)最高 Top10 的地段位置负拟,看起來地理位置還行,都是在三環(huán)四環(huán)之內(nèi)歹河、分布在市中心附件掩浙,如果單看這張圖的地圖的話得不到有用的信息花吟,可以對比一下 房價(jià)最低 Top10

下面是排名倒數(shù)前十的

image-20210303010210384
image-20210303010245990

上面是北京二手房房價(jià)排名后十 地段分布,房價(jià)在 1.5萬-3萬 不等厨姚,沒看到這個(gè)分布圖之前僅僅認(rèn)為上面價(jià)格是賣家標(biāo)錯(cuò)了衅澈,看完這個(gè)圖后才發(fā)現(xiàn)賣家是 掛著羊頭賣狗肉,掛著北京的名號遣蚀,賣著北京以外的房子(有的房子已經(jīng)位于河北境內(nèi))矾麻,這可能就是賣房的套路之一吧

事出反常必有妖纱耻,無論買房還是買其他商品也好芭梯,賣家不會平白無故地給我們優(yōu)惠,當(dāng)價(jià)格遠(yuǎn)低于市場價(jià)之前交易需慎重弄喘、慎重玖喘、再慎重!

房價(jià)我分為 5 個(gè)區(qū)間蘑志,分別為 0-3萬累奈、3-8萬、8-12萬急但、12-15萬澎媒,15萬+ 五段,看一下各自的占比分布

image-20210303083107857

其中房價(jià)位于 3-8萬 占比最大達(dá) 76 %占比波桩,次之就是8-12萬戒努、12-15萬,依次占比為16.38%镐躲、3.46%储玫,而房價(jià)位于 15 萬 + 占比最少,僅有1.12% 左右萤皂;

接下來我們再看一下撒穷,不同價(jià)位二手房在北京的分布

15萬+的

image-20210303083834061

12-15萬

image-20210303083905448

8-12萬

image-20210303083939248

3-8萬

image-20210303084102354
image-20210303084128883

從地段分布來看北京房價(jià)以8萬作為分水嶺,8萬+和8萬以內(nèi)房產(chǎn)分布明顯變化裆熙,價(jià)格越高端礼,越靠市中心以外;從地圖信息來看入录,想在北京買一套地段不錯(cuò)的房子蛤奥,預(yù)期房價(jià)最低也要在8萬+,8 萬是什么概念纷跛,也就說如果你想在北京買一套50平米的房子喻括,最低也要 400萬!

關(guān)于15萬+ 的房產(chǎn)贫奠,大致都分布兩個(gè)區(qū)域唬血,一個(gè)是高校區(qū)(周圍是人大望蜡、北航、清華等高校)拷恨,另一個(gè)位于右下角脖律,也就是北京朝陽區(qū)

image-20210303085517332

北京賣的二手房不一定都是裝修之后的,有可能也是毛坯(剛建造交付之后腕侄,未進(jìn)行任何裝修)小泉;參考下圖,北京二手房中毛坯占比約1.39%共41套冕杠,戶主買來這些房子大概率用于資產(chǎn)增值而不是作為剛需微姊;

image-20210303090233943

借助 Treemap 圖再看一下北京二手房建筑時(shí)間分布,大部分都集中于2002-2010 這 9 年分预,北京房產(chǎn)也是在這段期間迅速發(fā)展兢交, 到 2015 年之后明顯收緩,源于可建筑地段已經(jīng)達(dá)到飽和再加上國家相關(guān)政策的施壓

image-20210303100403126

最后貼張?jiān)~云圖作為本文的結(jié)束笼痹,選取的文本信息為3000條房產(chǎn)信息的標(biāo)題配喳,從圖中來看,標(biāo)題中高頻詞匯有 南北通透凳干、高樓層晴裹、精裝修、采光好 等救赐,也可以說這幾個(gè)特點(diǎn)也是大多數(shù)房源的最大賣點(diǎn)(拋去價(jià)格涧团、地段等因素)

22

5,小總結(jié)

本文針對北京二手房的分析角度并不全面净响,僅僅圍繞著房價(jià)少欺、地段、修建年份等幾個(gè)維度做了簡單分析馋贤,分析結(jié)果僅供學(xué)習(xí)赞别,其數(shù)據(jù)真實(shí)性有考察

好了以上就是本文的全部內(nèi)容,最后感謝大家的閱讀配乓,我們下期見~

6仿滔,源碼獲取

關(guān)于本文中涉及的全部源碼和數(shù)據(jù) 獲取方式,在微信公號:小張Python 犹芹,后臺回復(fù)關(guān)鍵字 210303 即可~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末崎页,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子腰埂,更是在濱河造成了極大的恐慌飒焦,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異牺荠,居然都是意外死亡翁巍,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門休雌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來灶壶,“玉大人,你說我怎么就攤上這事杈曲〕哿荩” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵担扑,是天一觀的道長恰响。 經(jīng)常有香客問我,道長魁亦,這世上最難降的妖魔是什么渔隶? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任羔挡,我火速辦了婚禮洁奈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绞灼。我一直安慰自己利术,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布低矮。 她就那樣靜靜地躺著印叁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪军掂。 梳的紋絲不亂的頭發(fā)上轮蜕,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機(jī)與錄音蝗锥,去河邊找鬼跃洛。 笑死,一個(gè)胖子當(dāng)著我的面吹牛终议,可吹牛的內(nèi)容都是我干的汇竭。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼穴张,長吁一口氣:“原來是場噩夢啊……” “哼细燎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起皂甘,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤玻驻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后偿枕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體璧瞬,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡佛析,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了彪蓬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寸莫。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖档冬,靈堂內(nèi)的尸體忽然破棺而出膘茎,到底是詐尸還是另有隱情,我是刑警寧澤酷誓,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布披坏,位于F島的核電站,受9級特大地震影響盐数,放射性物質(zhì)發(fā)生泄漏棒拂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一玫氢、第九天 我趴在偏房一處隱蔽的房頂上張望帚屉。 院中可真熱鬧,春花似錦漾峡、人聲如沸攻旦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽牢屋。三九已至,卻和暖如春槽袄,著一層夾襖步出監(jiān)牢的瞬間烙无,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工遍尺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留截酷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓狮鸭,卻偏偏與公主長得像合搅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子歧蕉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容