1. 程式人生 > >爬取鏈家租房資料,資料處理,進行視覺化分析

爬取鏈家租房資料,資料處理,進行視覺化分析

 lianjiaspider.py

import asyncio
import aiohttp
import pandas as pd
from lxml import etree


class LianjiaSpider(object):

    def __init__(self):
        self._headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36"}
        self._data = list()

    async def get(self, url):
        async with aiohttp.ClientSession() as session:
            try:
                async with session.get(url, headers=self._headers, timeout=3) as resp:
                    if resp.status == 200:
                        result = await resp.text()
                        return result
            except Exception as e:
                print(e.args)

    async def parse_html(self):
        for page in range(1, 77):
            url = "https://sjz.lianjia.com/zufang/pg{}/".format(page)
            print("正在爬取{}".format(url))
            html = await self.get(url)  # 獲取網頁內容
            html = etree.HTML(html)
            self.parse_page(html)
            print("正在儲存資料....")
            data = pd.DataFrame(self._data)
            data.to_csv("lianjia.csv", encoding='utf_8_sig')  # 寫入檔案

    def parse_page(self, html):
        info_panel = html.xpath("//div[@class='info-panel']")
        for info in info_panel:
            region = info.xpath(".//span[@class='region']/text()")
            zone = info.xpath(".//span[@class='zone']/span/text()")
            meters = info.xpath(".//span[@class='meters']/text()")
            where = info.xpath(".//div[@class='where']/span[4]/text()")

            con = info.xpath(".//div[@class='con']/text()")
            floor = con[0]  # 樓層
            type = con[1]  # 樣式

            agent = info.xpath(".//div[@class='con']/a/text()")[0]

            has = info.xpath(".//div[@class='left agency']//text()")

            price = info.xpath(".//div[@class='price']/span/text()")[0]
            price_pre = info.xpath(".//div[@class='price-pre']/text()")[0]
            look_num = info.xpath(".//div[@class='square']//span[@class='num']/text()")[0]

            one_data = {
                "region": region,
                "zone": zone,
                "meters": meters,
                "where": where,
                "louceng": floor,
                "type": type,
                "xiaoshou": agent,
                "has": has,
                "price": price,
                "price_pre": price_pre,
                "num": look_num
            }
            self._data.append(one_data)  # 新增資料

    def run(self):
        loop = asyncio.get_event_loop()
        tasks = [asyncio.ensure_future(self.parse_html())]
        loop.run_until_complete(asyncio.wait(tasks))


if __name__ == '__main__':
    Lian_jia = LianjiaSpider()
    Lian_jia.run()

lianjia.csv

  ,has,louceng,meters,num,price,price_pre,region,type,where,xiaoshou,zone
0,['集中供暖'],高樓層(共33層),['127.86平米\xa0\xa0'],0,2300,2018.11.08 更新,['鳳凰城梧桐苑\xa0\xa0'],板樓,['南'],南焦租房,['3室2廳\xa0\xa0']
1,['集中供暖'],中樓層(共6層),['55平米\xa0\xa0'],0,1200,2018.11.04 更新,['華興小區\xa0\xa0'],板樓,['南'],世紀公園租房,['1室1廳\xa0\xa0']
2,['集中供暖'],中樓層(共6層),['138平米\xa0\xa0'],0,2400,2018.11.04 更新,['河冶小區\xa0\xa0'],板樓,['南 北'],躍進租房,['3室2廳\xa0\xa0']
3,['集中供暖'],低樓層(共6層),['90平米\xa0\xa0'],1,1500,2018.11.06 更新,['瑞國花園\xa0\xa0'],板樓,['南'],躍進租房,['2室2廳\xa0\xa0']
4,['集中供暖'],低樓層(共14層),['180平米\xa0\xa0'],0,3500,2018.11.13 更新,['華脈新村\xa0\xa0'],板樓,['南 北'],四十中學租房,['4室2廳\xa0\xa0']
5,"['近地鐵', '隨時看房', '集中供暖']",中樓層(共40層),['57平米\xa0\xa0'],0,3000,2018.11.09 更新,['華潤大廈\xa0\xa0'],塔樓,['西'],南長租房,['1室1廳\xa0\xa0']
6,"['近地鐵', '隨時看房', '集中供暖']",中樓層(共40層),['42.56平米\xa0\xa0'],0,2200,2018.11.09 更新,['華潤大廈\xa0\xa0'],塔樓,['南'],南長租房,['1室1廳\xa0\xa0']
7,['集中供暖'],中樓層(共34層),['148平米\xa0\xa0'],0,2500,2018.11.08 更新,['北城國際B區\xa0\xa0'],板樓,['南 北'],沿東租房,['3室2廳\xa0\xa0']
8,"['近地鐵', '隨時看房', '集中供暖']",中樓層(共40層),['40.09平米\xa0\xa0'],0,2100,2018.11.09 更新,['華潤大廈\xa0\xa0'],塔樓,['南'],南長租房,['1室1廳\xa0\xa0']
9,"['近地鐵', '集中供暖']",低樓層(共33層),['185平米\xa0\xa0'],0,22000,2018.11.10 更新,['青鳥中山華府\xa0\xa0'],板樓,['北'],大經租房,['1室1廳\xa0\xa0']
10,"['近地鐵', '集中供暖']",低樓層(共33層),['242平米\xa0\xa0'],0,29000,2018.11.05 更新,['青鳥中山華府\xa0\xa0'],板樓,['北'],大經租房,['1室1廳\xa0\xa0']

去除無用字元

import re

f = open("lian_jia.csv", 'w', encoding='utf-8')
filename = 'lianjia.csv'
with open(filename, 'r', encoding='utf-8')as file:
    frd = file.readlines()
    for i in frd:
        pattern = re.compile(r'xa0')
        out = re.sub(pattern, '', i)
        s = "".join("".join("".join(out.split("\\\\")).split("']")).split("['"))
        d = "".join(s.split("平米"))
        f.write(d)

lian_jia.csv

 ,has,louceng,meters,num,price,price_pre,region,type,where,xiaoshou,zone
0,集中供暖,高樓層(共33層),127.86,0,2300,2018.11.08 更新,鳳凰城梧桐苑,板樓,南,南焦租房,3室2廳
1,集中供暖,中樓層(共6層),55,0,1200,2018.11.04 更新,華興小區,板樓,南,世紀公園租房,1室1廳
2,集中供暖,中樓層(共6層),138,0,2400,2018.11.04 更新,河冶小區,板樓,南 北,躍進租房,3室2廳
3,集中供暖,低樓層(共6層),90,1,1500,2018.11.06 更新,瑞國花園,板樓,南,躍進租房,2室2廳
4,集中供暖,低樓層(共14層),180,0,3500,2018.11.13 更新,華脈新村,板樓,南 北,四十中學租房,4室2廳
5,"近地鐵', '隨時看房', '集中供暖",中樓層(共40層),57,0,3000,2018.11.09 更新,華潤大廈,塔樓,西,南長租房,1室1廳
6,"近地鐵', '隨時看房', '集中供暖",中樓層(共40層),42.56,0,2200,2018.11.09 更新,華潤大廈,塔樓,南,南長租房,1室1廳
7,集中供暖,中樓層(共34層),148,0,2500,2018.11.08 更新,北城國際B區,板樓,南 北,沿東租房,3室2廳
8,"近地鐵', '隨時看房', '集中供暖",中樓層(共40層),40.09,0,2100,2018.11.09 更新,華潤大廈,塔樓,南,南長租房,1室1廳
9,"近地鐵', '集中供暖",低樓層(共33層),185,0,22000,2018.11.10 更新,青鳥中山華府,板樓,北,大經租房,1室1廳
10,"近地鐵', '集中供暖",低樓層(共33層),242,0,29000,2018.11.05 更新,青鳥中山華府,板樓,北,大經租房,1室1廳

視覺化戶型數量分佈

import pandas as pd
import matplotlib.pyplot as plt

house = pd.read_csv('lian_jia.csv', names=['', 'has', 'louceng', 'meters', 'num', 'price', 'price_pre', 'region', 'type', 'where','xiaoshou', 'zone'])
zone = house['zone'].value_counts()
plt.rcParams['font.sans-serif'] = ['FangSong']  # 指定預設字型
asd, sdf = plt.subplots(1, 1, dpi=200)  # 設定畫布
zone.head(10).plot(kind='bar', x='zone', y='size', title='戶型數量分佈', ax=sdf)  # 獲取前10條資料
plt.legend(['數量'])
plt.show()

柱狀圖

相關推薦

租房資料資料處理進行視覺分析

 lianjiaspider.py import asyncio import aiohttp import pandas as pd from lxml import etree class LianjiaSpider(object): def __init

租房資訊(萬級資料的簡單實現)

這不是一個很難的專案,沒有ajax請求,也沒有用框架,只是一個requests請求和BeautifulSoup的解析 不過,看這段程式碼你會發現,BeautifulSoup不止只有find和fing_all用於元素定位,還有fing_next等其他的更簡單的,

分享地圖找房房價資料的小爬蟲

一、說在前面 受人所託,爬取鏈家上地圖找房的資料:https://bj.lianjia.com/ditu/。 上面有按區域劃分的二手房均價和在售套數,我們的任務就是抓下這些資料。 二、開幹 2.1失敗一次 老樣子,Chrome 按下F12開啟Chrome DevTo

python新房資料

轉載:https://blog.csdn.net/clyjjczwdd/article/details/79466032 from bs4 import BeautifulSoup import requests import time import pandas as p

資料採集(四):用XPath網房價資料

準備工作 編寫爬蟲前的準備工作,我們需要匯入用到的庫,這裡主要使用的是requests和lxml兩個。還有一個Time庫,負責設定每次抓取的休息時間。 import requests import requests import time from lxml

Python地鐵房資料

#coding=gbk #因為涉及到中文,utf-8會報錯 ### 環境:Python 3.6### import requests import re import pandas as pd import csv from bs4 import BeautifulSoup

使用Java及jsoup北京二手房房價資料

由於是初次使用Java寫爬蟲,所以程式碼有些繁瑣,請大家見諒,並能給與指正首先分析鏈家北京二手房頁面,使用360瀏覽器的審查元素功能,檢視原始碼,獲取查詢標籤如圖一級查詢所示,此圖標籤所獲取的是鏈家北京二手房頁面下的一級地區地址由於具體獲取有些複雜,故列大致步驟如下主頁——》

利用高德API + Python租房資訊 01

看了實驗樓的專案發現五八同城爬取還是有點難度所以轉戰鏈家 實驗程式碼如下 from bs4 import BeautifulSoup from urllib.request import urlopen import csv url = 'https://gz.lia

拉勾熱門城市“資料分析”崗位進行視覺分析

首先,寫一個爬取崗位的爬蟲,如下:# -*- coding:utf-8 -*- from json import JSONDecodeError import requests import time import pandas as pd # 獲取儲存職位資訊的json

爬蟲網北京二手房資訊

# 鏈家網二手房資訊爬取 import re import time import requests import pandas as pd from bs4 import BeautifulSoup url = 'http://bj.lianjia.com/ershouf

初識Scrapy框架+爬蟲實戰(7)-網100頁租房資訊

Scrapy簡介 Scrapy,Python開發的一個快速、高層次的螢幕抓取和web抓取框架,用於抓取web站點並從頁面中提取結構化的資料。Scrapy用途廣泛,可以用於資料探勘、監測和自動化測試。Scrapy吸引人的地方在於它是一個框架,任何人都可以根

Django實戰: Python爬蟲上海二手房資訊存入資料庫並在前端顯示

好久沒寫Django實戰教程了,小編我今天就帶你把它與Python爬蟲結合做出個有趣的東西吧。我們將開發這樣一個應用,前端使用者可以根據行政區劃,房廳數和價格區間選擇需要爬取的二手房房源資訊,後臺Python開始爬取資料。爬取資料完成後,通過Django將爬來的資料存入資料庫

爬蟲二手房資訊對二手房做分析

import numpy as np import pandas as pd import matplotlib.pyplot as plt from bs4 import BeautifulSoup import requests def genera

Scrapy實戰篇(九)之網天津租房數據

房子 爬取 思路 頁面 scrapy more 關心 分析 網上   以後有可能會在天津租房子,所以想將鏈家網上面天津的租房數據抓下來,以供分析使用。   思路:   1、以初始鏈接https://tj.lianjia.com/zufang/rt200600000001

python爬蟲:深圳全部二手房的詳細信息

data sts rip 二手房 lse area 列表 dom bubuko 1、問題描述: 爬取鏈家深圳全部二手房的詳細信息,並將爬取的數據存儲到CSV文件中 2、思路分析: (1)目標網址:https://sz.lianjia.com/ershoufang/ (2

Python爬蟲項目--熱門城市新房

聲明 rules nal logging 命令行 -- new exec 狀態 本次實戰是利用爬蟲爬取鏈家的新房(聲明: 內容僅用於學習交流, 請勿用作商業用途) 環境 win8, python 3.7, pycharm 正文 1. 目標網站分析 通過分析, 找出相關url

Python爬蟲專案--熱門城市新房

本次實戰是利用爬蟲爬取鏈家的新房(宣告: 內容僅用於學習交流, 請勿用作商業用途) 環境 win8, python 3.7, pycharm 正文 1. 目標網站分析 通過分析, 找出相關url, 確定請求方式, 是否存在js加密等. 2. 新建scrapy專案 1. 在cmd命令列視窗中輸入以

python 學習 - 爬蟲入門練習 網二手房資訊

import requests from bs4 import BeautifulSoup import sqlite3 conn = sqlite3.connect("test.db") c = conn.cursor() for num in range(1,101): url = "h

43.scrapy網站二手房信息-1

response ons tro 問題 import xtra dom nts class 首先分析:目的:采集鏈家網站二手房數據1.先分析一下二手房主界面信息,顯示情況如下:url = https://gz.lianjia.com/ershoufang/pg1/顯示

43.scrapy網站二手房資訊-1

  首先分析:目的:採集鏈家網站二手房資料1.先分析一下二手房主介面資訊,顯示情況如下:url = https://gz.lianjia.com/ershoufang/pg1/顯示總資料量為27589套,但是頁面只給返回100頁的資料,每頁30條資料,也就是隻給返回3000條資料。