房屋千千萬,如何找到便宜實惠的呢渐裸,python采集數(shù)據(jù)并做數(shù)據(jù)可視化~

前言

嗨嘍巫湘,大家好呀装悲!這里是魔王吶~

環(huán)境使用:

  • Python 3.8
  • Pycharm

模塊使用:

  • requests >>> pip install requests 數(shù)據(jù)請求模塊
  • parsel >>> pip install parsel 數(shù)據(jù)解析模塊
  • csv 內(nèi)置模塊

如果安裝python第三方模塊:

  1. win + R 輸入 cmd 點擊確定, 輸入安裝命令 pip install 模塊名 (pip install requests) 回車
  2. 在pycharm中點擊Terminal(終端) 輸入安裝命令

如何配置pycharm里面的python解釋器?

  1. 選擇file(文件) >>> setting(設(shè)置) >>> Project(項目) >>> python interpreter(python解釋器)
  2. 點擊齒輪, 選擇add
  3. 添加python安裝路徑

pycharm如何安裝插件?

  1. 選擇file(文件) >>> setting(設(shè)置) >>> Plugins(插件)
  2. 點擊 Marketplace 輸入想要安裝的插件名字 比如:翻譯插件 輸入 translation / 漢化插件 輸入 Chinese
  3. 選擇相應(yīng)的插件點擊 install(安裝) 即可
  4. 安裝成功之后 是會彈出 重啟pycharm的選項 點擊確定, 重啟即可生效

思路分析

這有自己的一套模板 <通用>

一. 數(shù)據(jù)來源分析

  1. 確定自己采集數(shù)據(jù)是什么, 并且這些數(shù)據(jù)可以從那里獲取到

鏈家網(wǎng)站數(shù)據(jù), 靜態(tài)網(wǎng)頁.... <你所看到的數(shù)據(jù), 都來于網(wǎng)頁源代碼>

二. 代碼實現(xiàn)步驟過程

  1. 發(fā)送請求, 對于url地址發(fā)送請求 https://cs.lianjia.com/ershoufang/104108672997.html
  2. 獲取數(shù)據(jù), 獲取網(wǎng)頁源代碼數(shù)據(jù)
  3. 解析數(shù)據(jù), 提取我們想要的數(shù)據(jù)內(nèi)容
  4. 保存數(shù)據(jù), 把數(shù)據(jù)保存到表格里面

代碼

一、采集數(shù)據(jù)

1.1 導(dǎo)入模塊

# 導(dǎo)入數(shù)據(jù)請求模塊
import requests
# 導(dǎo)入數(shù)據(jù)解析模塊
import parsel
import re
import csv
f = open('二手房多頁.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '標題',
    '賣點',
    '總價',
    '單價',
    '戶型',
    '樓層',
    '共有樓層數(shù)',
    '裝修',
    '朝向',
    '建造時間',
    '面積',
    '小區(qū)',
    '區(qū)域',
    '所屬區(qū)',
    '梯戶比例',
    '是否有電梯',
    '房屋屬性',
    '詳情頁',
])
csv_writer.writeheader()

1.2 發(fā)送請求

  • 確定請求網(wǎng)址是什么
  • 請求方式
  • 偽裝模擬瀏覽器

headers >>> 請求頭加什么數(shù)據(jù), 怎么找呢?

User-Agent: 用戶代理 表示瀏覽器基本身份標識... <相當(dāng)于你進超市, 要看健康碼或者戴口罩>

如果你不加headers對于某些網(wǎng)站, 你可能被識別出來是你爬蟲程序, 被反爬 >>> 得不到數(shù)據(jù)headers 字典數(shù)據(jù)類型

for page in range(1, 11):
    url = f'https://cs.lianjia.com/ershoufang/pg{page}/'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36'
    }
    response = requests.get(url=url, headers=headers)
    # print(response.text)
    selector = parsel.Selector(response.text)
    # 真正的掌握css選擇器解析方法 在系統(tǒng)課程都是需要學(xué)習(xí)2.5個小時左右
    href = selector.css('.sellListContent li.clear .title a::attr(href)').getall()
    for link in href:
        # url = 'https://cs.lianjia.com/ershoufang/104108664407.html'
        # 發(fā)送請求
        response = requests.get(url=link, headers=headers)
        # print(response)  # <Response [200]> 響應(yīng)對象 200 狀態(tài)碼表示請求成功
        # 獲取數(shù)據(jù)
        # print(response.text)

1.3 解析數(shù)據(jù)

css選擇器 >>> 根據(jù)標簽屬性內(nèi)容提取數(shù)據(jù)

        selector_1 = parsel.Selector(response.text)  # 需要把獲取html字符串?dāng)?shù)據(jù)轉(zhuǎn)成selector對象
        # print(selector)
        # 復(fù)制下來僅僅只是定位到標簽, 我獲取標簽里面title屬性
        try:
            # body > div.sellDetailHeader > div > div > div.title > h1
            title = selector_1.css('.main::text').get()  # 標題
            selling_point = selector_1.css('.sub::text').get()  # 賣點
            price = selector_1.css('.price .total::text').get()  # 總價
            unitPrice = selector_1.css('.unitPrice .unitPriceValue::text').get()  # 單價
            house_type = selector_1.css('.room .mainInfo::text').get()  # 戶型
            subInfo = selector_1.css('.room .subInfo::text').get().split('/')  # 樓層
            floor = subInfo[0]  # 樓層
            num = re.findall('\d+', subInfo[1])[0]  # 共有樓層數(shù)
            furnish = selector_1.css('.type .subInfo::text').get().split('/')[-1]  # 裝修
            face = selector_1.css('.type .mainInfo::text').get()  # 朝向
            date = re.findall('\d+', selector_1.css('.area .subInfo::text').get())  # 建造時間
            if len(date) == 0:
                date = '0'
            更多源碼尚氛、解答诀诊、教程資料加群:832157862免費領(lǐng)取哦~
            else:
                date = date[0]
            area = selector_1.css('.area .mainInfo::text').get().replace('平米', '')  # 面積
            community = selector_1.css('.communityName .info::text').get()  # 小區(qū)
            areaName_info = selector_1.css('.areaName .info a::text').getall()  # 區(qū)域
            areaName = areaName_info[0]  # 所屬區(qū)
            region = areaName_info[1]  # 區(qū)域
            scale = selector_1.css('div.content ul li:nth-child(10)::text').get()  # 梯戶比例
            elevator = selector_1.css('div.content ul li:nth-child(11)::text').get()  # 是否有電梯
            houseProperty = selector_1.css('div.content  li:nth-child(2) span:nth-child(2)::text').get()  # 房屋屬性
            dit = {
                '標題': title,
                '賣點': selling_point,
                '總價': price,
                '單價': unitPrice,
                '戶型': house_type,
                '樓層': floor,
                '共有樓層數(shù)': num,
                '裝修': furnish,
                '朝向': face,
                '建造時間': date,
                '面積': area,
                '小區(qū)': community,
                '區(qū)域': region,
                '所屬區(qū)': areaName,
                '梯戶比例': scale,
                '是否有電梯': elevator,
                '房屋屬性': houseProperty,
                '詳情頁': link,
            }
            csv_writer.writerow(dit)
            print(
                title, selling_point, price, unitPrice, house_type, subInfo, furnish, face,
                date, area, community, region, scale, elevator, houseProperty, link
            )
        except:
            pass

二、可視化代碼

在pycharm里面打開的阅嘶,效果圖大家隨便看看就可以啦啊属瓣,沒有在ipynb里面打開的好看~

2.1 折線圖

# 繪制各區(qū)二手房總價折線圖,是否有電梯作為評定標準
plt.figure(figsize=(12,6))
# Add title
plt.title("各區(qū)二手房總價排名")
sns.lineplot(x="所屬區(qū)", y="總價", data=data,hue=data['是否有電梯'])
# 一般有電梯的房子價格會高于無電梯的房子讯柔,但是下圖中青羊區(qū)抡蛙、金牛區(qū)是例外。
# 此圖也可解釋后面的熱力圖中顯示“共有樓層數(shù)”與“單價”有一定的關(guān)系魂迄,因為有電梯就表示共有樓層數(shù)較高粗截。

2.1.1 效果圖

2.2 各區(qū)的戶型數(shù)量對比

# 各區(qū)的戶型數(shù)量對比
plt.figure(figsize=(16,6))
huxing_num = data.groupby([data['所屬區(qū)'],data['戶型']])['小區(qū)'].count().reset_index().rename(columns={'所屬區(qū)':'所屬區(qū)','戶型':'戶型','小區(qū)':'數(shù)量'})
# print(huxing_num)
sns.barplot(x="戶型", y="數(shù)量", data=huxing_num,order=sort,hue=huxing_num['所屬區(qū)'])
# 下圖中天府新區(qū)和高新區(qū)的“3室2廳”房源數(shù)量明顯多于其他區(qū),可以參考各區(qū)不同房型數(shù)量捣炬,針對性地篩選房源熊昌。

2.2.1 效果圖

image.png

2.3 房屋屬性與單價之間的條形圖

# 繪制房屋屬性與單價之間的條形圖
plt.figure(figsize=(12,6))
shuxing  = data.groupby(data['房屋屬性'])['單價'].mean().reset_index()
sns.barplot(x='房屋屬性',y='單價',data=shuxing)

2.4 繪制熱力圖

# 繪制熱力圖,觀測其他數(shù)值型變量與單價之間的關(guān)系
import numpy as np
cols = data.corr().nlargest(10,'單價')['單價'].index#局部運行湿酸,一步一步索引
cm = np.corrcoef(data[cols].values.T)
plt.subplots(figsize=(12,6))
sns.heatmap(cm, vmax=0.9,annot=True,square=True,annot_kws={'size':10},xticklabels=cols.values,yticklabels=cols.values)
# 熱力圖展示出單價與總價婿屹、共有樓層數(shù)、建造時間推溃、面積有關(guān)系昂利,在以上的分析中也證實了這些關(guān)系

2.4.1 效果圖

image.png

2.5 制作詞云圖

# 繪制“房屋賣點”詞云圖
import jieba
from PIL import Image
import wordcloud

text = ("".join(i for i in data['賣點'])) #將列數(shù)據(jù)組合到一起形成一個字符串
# print(text)
cut = jieba.cut(text)
img = Image.open('1.png')     #打開遮罩照片
img_array = np.array(img)   #將圖片轉(zhuǎn)換為數(shù)組
#對詞云進行設(shè)置
wc = wordcloud.WordCloud(         
    background_color = 'white',
    height = 800,
    width = 400,#設(shè)置不同的像素,詞云圖各詞的位置也在發(fā)生變化
    mask = img_array,
    font_path = 'msyh.ttc'       #字體所在位置:C:\Windows\Fonts
)
wc.generate_from_text(text)

plt.figure(figsize=(20,6))  #參數(shù)的設(shè)置會改變圖片詞語的排列
plt.imshow(wc)    #將詞云放在遮罩圖片上
plt.axis('off') #是否顯示坐標軸

plt.show()   #顯示生成的詞云圖片
# 詞云圖展示出能吸引購房者的房屋特點包括“戶型方正”美莫、“采光好”页眯、“中間樓層”、“精裝修”厢呵、“視野開闊”等

2.5.1 效果圖

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末窝撵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子襟铭,更是在濱河造成了極大的恐慌碌奉,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寒砖,死亡現(xiàn)場離奇詭異赐劣,居然都是意外死亡,警方通過查閱死者的電腦和手機哩都,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門魁兼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人漠嵌,你說我怎么就攤上這事咐汞「呛簦” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵化撕,是天一觀的道長几晤。 經(jīng)常有香客問我,道長植阴,這世上最難降的妖魔是什么蟹瘾? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮掠手,結(jié)果婚禮上憾朴,老公的妹妹穿的比我還像新娘。我一直安慰自己惨撇,他們只是感情好伊脓,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布府寒。 她就那樣靜靜地躺著魁衙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪株搔。 梳的紋絲不亂的頭發(fā)上剖淀,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機與錄音纤房,去河邊找鬼纵隔。 笑死,一個胖子當(dāng)著我的面吹牛炮姨,可吹牛的內(nèi)容都是我干的捌刮。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼舒岸,長吁一口氣:“原來是場噩夢啊……” “哼绅作!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蛾派,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤俄认,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后洪乍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體眯杏,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年壳澳,在試婚紗的時候發(fā)現(xiàn)自己被綠了岂贩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡巷波,死狀恐怖萎津,靈堂內(nèi)的尸體忽然破棺而出科平,到底是詐尸還是另有隱情,我是刑警寧澤姜性,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布瞪慧,位于F島的核電站,受9級特大地震影響部念,放射性物質(zhì)發(fā)生泄漏弃酌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一儡炼、第九天 我趴在偏房一處隱蔽的房頂上張望妓湘。 院中可真熱鬧,春花似錦乌询、人聲如沸榜贴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽唬党。三九已至,卻和暖如春鬼佣,著一層夾襖步出監(jiān)牢的瞬間驶拱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工晶衷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蓝纲,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓晌纫,卻偏偏與公主長得像税迷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子锹漱,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

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