1. 程式人生 > >python爬取全國房價並分析

python爬取全國房價並分析

我相信國內房價一直都是苦逼程式設計師比較關注的事情,我也非常關注全國部分地區的房價,因此我最原始的需求就是想看看全國都哪些地方房價比較高,以及幾個我比較關注的城市房價都是怎麼個漲勢。關於這兩個功能,我並沒有打算做很漂亮的應用,所以實現的思路也很簡單粗暴,但它可以滿足我的基本的需求。如果你也有需要,我們可以一起來完善這個應用,讓他更通用。

使用方法

我說了我並沒有打算做很漂亮的應用,目前這個專案也只是可以滿足我的基本需求,因此本專案稍微需要一點程式設計基礎和mysql操作基礎。至少要入門水平,然後就可以照著下面的步驟操作了:

  1. 安裝依賴: pip install -r requirements.txt
  2. 安裝mysql並設定密碼然後進入後執行下面命令:
create database house DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
use house;
CREATE TABLE residential (
    record_id INT NOT NULL AUTO_INCREMENT,
    province VARCHAR(100) NOT NULL,
    city VARCHAR(100) NOT NULL,
    year YEAR NOT NULL,
    month TINYINT UNSIGNED, # DEFAULT
1 price DOUBLE, # NOT NULL, 單位: 元/m^2 url VARCHAR(100), PRIMARY KEY (record_id) );
  1. 爬取房價資料到資料庫(方便後期分析): python clawer.py
  2. 房價資料分析: 簡單閱讀修改 price_analyse.py 檔案的內容後執行 python price_analyse.py 即可。

程式原理

資料來源

最初有這個需求的時候我就百度搜了一下有沒有現成的房價資料可以直接分析,很可惜並沒有找到,但是發現了下面這個網站:

簡單的分析了一下網站的結構,發現它的資料非常好爬!於是馬上決定就是它了。

ps. 程式碼見光後應該很快就不能這麼輕易爬了,如果爬的人多的話…該網站的反爬機制及將上線,到時候再…嗯,道高一尺魔高一丈/笑臉。

資料爬取

房價相關資料抓取下來怎麼存呢?鑑於網站的房價資料現在可以輕易爬下來並不代表將來也可以輕易爬,為了保險起見還是決定先儲存到資料庫方便後期深入分析了。資料庫需要什麼結構呢?說實話我只是關心 在哪個省的哪個城市什麼時候房價是多少,於是很自然的我的資料表包含了如下列: 省市/城市/年/月/房價 等幾個關鍵資料。

下面首先介紹資料庫的操作基本流程(windows使用者需要自己適配用法了,關鍵步驟請看程式碼註釋),然後介紹如何爬取該網站的房價資訊,其實都很簡單。

mac下mysql安裝&使用&建立庫和表

  1. 安裝mysql:
brew install mysql
mysql.server start # 手動啟動
mysql.server stop # 手動停止
mysql -uroot # 預設沒有密碼, 登入後設置
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('xyz123');
mysql -u root -p 'xyz123' # 登入
  1. mysql基本操作:
mysql -u root -p # xyz123
# show databases;
create database house DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; # drop database house
use house;
# 建立和刪除
CREATE TABLE residential (
    record_id INT NOT NULL AUTO_INCREMENT,
    province VARCHAR(100) NOT NULL,
    city VARCHAR(100) NOT NULL,
    year YEAR NOT NULL,
    month TINYINT UNSIGNED, # DEFAULT 1
    price DOUBLE, # NOT NULL, 單位: 元/m^2
    PRIMARY KEY (record_id)
); 
# drop table residential;
# 表檢視
show tables;
describe residential;
# 表修改
ALTER TABLE residential ALTER COLUMN month SET DEFAULT 1; # 修改欄位預設值, COLUMN 可省
ALTER TABLE residential MODIFY price DOUBLE NOT NULL; # 設定欄位非空
ALTER TABLE residential ADD desc_info VARCHAR(100); # 增加欄位
ALTER TABLE residential CHANGE desc_info drop_col VARCHAR(100) NOT NULL; # 修改列名
ALTER TABLE residential DROP drop_col; # 刪除欄位
ALTER TABLE residential ADD url VARCHAR(100); 

CREATE TABLE test (
    record_id INT NOT NULL AUTO_INCREMENT,
    province VARCHAR(100) NOT NULL,
    city VARCHAR(100) NOT NULL,
    year YEAR NOT NULL,
    month TINYINT UNSIGNED, # DEFAULT 1
    price DOUBLE, # NOT NULL, 單位: 元/m^2
    url VARCHAR(100),
    PRIMARY KEY (record_id)
); 

# 資料增改查刪
INSERT INTO residential(province ,city, year, price) VALUES('guizhou','guiyang',1992, 45000);
UPDATE residential SET province='GZ' WHERE province='guizhou';
SELECT * FROM residential;
DELETE FROM residential WHERE province='GZ';
DELETE FROM residential; # 刪除全部資料

網站爬取分析

手動檢視房價資訊的操作流程分析:

  1. 點選任意省份,然後右邊的檢視更多,發現地址很有規律:http://www.creprice.cn/proprice/pcguangxi.html 前面都相似,後面就是[pc+省份全拼], 可以以此來爬取全國各省資料(幾個直轄市略有區別,具體參考專案的程式碼實現)。
  2. 任何一個地址又分為 住宅/辦公/商鋪 相關的頁面,地址分別也只是最後不一樣: pcguangxi.html/pcguangxi-ty21.html/pcguangxi-ty22.html。我當前只關注住宅的所以就只實現了爬取住宅的程式碼,其他的有需求時再說吧。
  3. 任何一個頁面都包含時間選擇和展開更多選項,但是展開的通常都沒有實際資料。而其中時間對應的也是靜態頁面字尾,在上面的.html前加上日期即可,例如 -ti201512.html 遍歷以上一些地方應該可以獲取比較合理的資料結構了。

由此得到爬取流程:獲取中國各省的漢字,然後生成各個省市的拼音,組合生成的年月相關字串,組裝成網址;然後到該網址中找到城市名字和對應的房價,儲存到資料庫。

網站資料抓取程式碼基礎

其實我也是邊百度邊嘗試的,有些庫我也沒用過,都是百度後從庫的基本使用去了解如何滿足自己的需求,比如百度python 漢字轉拼音 才知道還有pinyin這種庫可以用。

from pinyin
>>> print(pinyin.get('你 好'))
nǐ hǎo
>>> print(pinyin.get('你好', format="strip", delimiter=" "))
ni hao
>>> print(pinyin.get('你好', format="numerical"))
ni3hao3
>>> print(pinyin.get_initial('你好'))
n h
  1. 省份網址生成器:
def gen_all_url():
    for pr in PROVINCE_NAME:
        for year in range(NOW.year, 2007, -1):
            for month in range(12, 0, -1):
                pr['url'] = "%s/proprice/pc%s-ti%d%02d.html" % (BASE_URL, pr['pinyin'], year, month)
                pr['year'] = year
                pr['month'] = month
                yield pr
  1. 網頁下載器:
import requests
res = requests.get('http://www.creprice.cn/proprice/pcguizhou-ti201803.html')
with open('test.html','w') as f:
    f.write(res.text)

其實我也沒想到這個網站的爬取這麼簡單,連基本的反爬機制都沒有,那我就只能不客氣了!
5. 非同步爬蟲:沒想到猴子補丁支援了requests但是對於mysql的支援並不好,而且這個網站動不動就被爬爆了。所以最後沒有采用非同步的方式。

最後爬取的過程大概是下面這樣(看起來比較慢,爬完全部資料大概要3小時吧):
這裡寫圖片描述

資料分析

  1. 資料讀取: 資料庫讀取操作,獲取資料後就直接查詢資料庫就好了,沒什麼技術含量。
  2. 繪製房價的溫度圖: 參考程式碼,效果如下,是全國2018年房價的溫度圖。

房價溫度圖

可以看出來除了北上廣深杭以外,國內還有重慶/遼寧/吉林的房價都挺高的。更多資訊大家就自己感受一下吧…

  1. 繪製趨勢線型圖: 參考程式碼,效果如下,是幾個城市的房價上漲趨勢。

房價長勢圖

這個圖也說明了國內大部分省市的房價都是在上漲的,就我看的幾個城市而言,從2017年1月開始都普遍大幅度上漲(當時到底發生了什麼?),從上漲的趨勢來看這幾個城市都應該還有一定的上漲空間。如果要買房的話,可以考慮在那兒呢?—fuck…當然時看看在哪兒才買得起啊!

上面的兩個圖也只是舉個例子啦,分析結果也就是我個人的簡單直觀的看法,相信大家看到的比我看到的多,期待聽到大家深入淺出的分析結論。

最後在這個過程中我也發現了一個關於租房資料自動爬取的專案,感興趣的可以圍觀下。
ps. 這個專案看起來比我這個麻煩多了,畢竟要適配多家中介機構的網站,維護起來應該也比較辛苦。

如果本文對你有所幫助,可以點贊以支援作者的持續更新哦

支援作者

相關推薦

python全國房價分析

我相信國內房價一直都是苦逼程式設計師比較關注的事情,我也非常關注全國部分地區的房價,因此我最原始的需求就是想看看全國都哪些地方房價比較高,以及幾個我比較關注的城市房價都是怎麼個漲勢。關於這兩個功能,我並沒有打算做很漂亮的應用,所以實現的思路也很簡單粗

Python天氣資訊定時傳送給微信好友(異地戀神器)!!

效果 前言 中國天氣網: http://www.weather.com.cn/ 點選右上角的具體的天氣資料 想獲取哪個城市的天氣,就搜尋城市進行切換 這裡以青島為例 可以看到此時url為: http://www.weather.com.cn/weat

詳解使用Python豆瓣短評繪製詞雲

使用Python爬取豆瓣短評並繪製詞雲 成果如下(比較醜,湊合看) 1.分析網頁 開啟想要爬取的電影,比如《找到你》,其短評如下: 檢視原始碼 發現短評存放在<span>標籤裡 並且class為short,所以通過爬取其裡邊的內容即可

Python網頁資料匯入表格

import requests import time import random import socket import http.client from bs4 import BeautifulSoup import csv def getContent(url

Python B 站資料分析,宋智孝李光洙誰最受中國粉絲喜愛

作者 | 左伊雅責編 | 胡巍巍《Running Man》是韓國SBS電視臺在《星期天真好》單元

[轉載]Python豆瓣影評生成詞雲圖程式碼

# -*- coding:utf-8 -*- ''' 抓取豆瓣電影某部電影的評論 這裡以《我不是潘金蓮為例》 網址連結:https://movie.douban.com/subject/26630781/comments 為了抓取全部評論需要先進行登入 '''

python 資訊文章儲存html及pdf格式

一、需求 研究生學長讓我把一個植物表型資訊系列文章的一系列文章爬下來儲存為pdf或者html格式。 首頁網址: https://mp.weixin.qq.com/s?__biz=MzI0Mjg5ODI1Ng==&mid=2247486022&idx=1&sn=

Python爬蟲系列之四:利用PythonPyODPS頁面整合成PDF文件

文章架構 開發場景 在日常開發過程中, 經常需要參考一些文件。對於線上文件,往往由於網速等原因,用起來總不是那麼(ma)順(fan)心。 開發工具 Anaconda Python 2 實現方案 基於 bs4 模組標籤解析 爬取

python歌曲評論進行資料視覺化

一、抓資料 要想做成詞雲圖表,首先得有資料才行。於是需要一點點的爬蟲技巧。 基本思路為:抓包分析、加密資訊處理、抓取熱門評論資訊 1.抓包分析 我們首先用瀏覽器開啟網易雲音樂的網頁版,進入薛之謙《摩天大樓》歌曲頁面,可以看到下面有評論。接著F12進入開發者控制檯(審查

python文章連結分類

環境: OS:win10 x64 Python:3.5.1 PyCharm:5.0.3 為了方便學習,根據關鍵字過濾資料爬取下來,並做分類。 爬取jobbole import requests from bs4 import BeautifulSoup import

python 指定圖片將圖片下載到指定資料夾

""" Version 1.1.0 Author lkk Email [email protected] date 2018-10-19 11:34 DESC 下載指定網頁的圖片到指定資料夾

第十講:Python網頁圖片儲存到本地,包含次層頁面

上一講我們講到了從暱圖網的首頁下載圖片到本地,但是我們發現首頁上面的大部分連結其實都可以進入到二級頁面。 在二級頁面裡面,我們也

拉勾網全國python職位數據分析薪資,工作經驗,學歷等信息

add with color palette 谷歌瀏覽器 tor item imp 文件中 首先前往拉勾網“爬蟲”職位相關頁面 確定網頁的加載方式是JavaScript加載 通過谷歌瀏覽器開發者工具分析和尋找網頁的真實請求,確定真實數據在position.Ajax開頭的鏈

python二手房交易資訊進行分析

用python爬取二手房交易資訊並分析 第一步:編寫爬蟲 爬取某平臺上海市十個區共900條二手房的交易資訊 #爬取上海十個區的二手房價資訊 import requests from bs4 import BeautifulSoup import csv #

Python拉勾網招聘資訊可視化分析

需求: 1:獲取指定崗位的招聘資訊 2:對公司地區,公司待遇,學歷情況,工作經驗進行簡單分析並可視化展示 視覺化分析: 公司地區:柱狀圖,地圖 公司待遇:雲圖 公司-學歷情況:餅圖 公司工作經

Python豆瓣電影的短評資料進行詞雲分析處理

前言 對於爬蟲很不陌生,而爬蟲最為經典的案例就是爬取豆瓣上面的電影資料了,今天小編就介紹一下如果爬取豆瓣上面電影影評,以《我不是藥神》為例。 基本環境配置 版本:Python3.6 系統:Windows 本人對於Python學習建立了一個小小的學習圈子,為各位提供了

MongoDB+Python 寶寶樹問答模組進行簡單分析

前幾天剛學了MongoDB的。聽說有諸多好處。邊想著來感受下。 恰逢一好友職位調整,需要了解目前母嬰市場圍繞的重心。 所以便我去  寶寶樹  ,爬取問答,看看媽媽們都在想什麼。 整體思路 1,爬取各大問題分類及其連結。分成一級分類,二級分類。比如準備懷孕 - 懷孕

利用python龍虎榜數據及後續分析

登錄 one 可能 股市 .com 爬蟲 但我 由於 相關 ##之前已經有很多人寫過相關內容,但我之前並未閱讀過,這個爬蟲也是按照自己的思路寫的,可能比較醜陋,請見諒! 本人作為Python爬蟲新手和股市韭菜,由於時間原因每晚沒辦法一個個翻龍虎榜數據,所以希望借助爬蟲篩選出

我用Python網易雲音樂上的Hip-hop歌單,分析rapper如何押韻

line gone 謠言 大致 -i 態度 大眾 其中 當前 緣起 《中國有嘻哈》這個節目在這個夏天吸引了無數的目光,也讓嘻哈走進了大眾的視野。作為我今年看的唯一一個綜藝節目,它對我的影響也蠻大。這個夏天,我基本都在杭州度過,在上下班的taxi上,我幾乎都在刷這個節目,最後

python微博數據生成詞雲

font 意思 extra 很多 返回 json 自己 技術分享 pre 很早之前寫過一篇怎麽利用微博數據制作詞雲圖片出來,之前的寫得不完整,而且只能使用自己的數據,現在重新整理了一下,任何的微博數據都可以制作出來,放在今天應該比較應景。 一年一度的虐汪節,是繼續蹲在角落默