爬虫+可视化——链家杭州二手房房源信息

------------本篇文章旨在练习数据的爬取及可视化

简介

本项目分两个部分:
1.爬虫:共爬取到链家杭州二手房信息30806条
2.可视化:主要用pyecharts

一、获取数据

  • 提取杭州各个行政区二手房信息
  • 将得到的数据保存为DataFrame

导入相关的包

#-*-coding:utf-8-*-
from bs4 import BeautifulSoup  
import pandas as pd
from tqdm import tqdm
import math
import requests  
import lxml
import re
import time
area_dic = {'西湖区':'xihu',
            '钱塘新区':'qiantangxinqu',
            '下城区':'xiacheng',
            '江干区':'jianggan',
            '拱墅区':'gongshu',
            '上城区':'shangcheng',
            '滨江区':'binjiang',
            '余杭区':'yuhang',
           '萧山区':'xiaoshan',
           '淳安区':'chunan1',
           '富阳区':'fuyang',
           '临安区':'linan'}


# 加个header以示尊敬
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36',
           'Referer': 'https://hz.lianjia.com/ershoufang/'}
# 新建一个会话
sess = requests.session()
sess.get('https://hz.lianjia.com/ershoufang/', headers=headers)

# url示例:https://sz.lianjia.com/ershoufang/xihu/pg2/
url = 'https://hz.lianjia.com/ershoufang/{}/pg{}/'

# 当正则表达式匹配失败时,返回默认值(errif)
def re_match(re_pattern, string, errif=None):
    try:
        return re.findall(re_pattern, string)[0].strip()
    except IndexError:
        return errif

开始获取房源数据

# 新建一个DataFrame存储信息
data = pd.DataFrame()

for key_, value_ in area_dic.items():
    # 获取该行政区下房源记录数
    start_url = 'https://hz.lianjia.com/ershoufang/{}/'.format(value_)
    html = sess.get(start_url).text
    house_num = re.findall('共找到 (.*?) 套.*二手房', html)[0].strip()
    print('正在获取{}数据: 二手房源共计「{}」套'.format(key_, house_num))
    time.sleep(1)
    # 由于页面限制, 所以每个行政区只能获取最多100页共计3000条房源信息
    total_page = int(math.ceil(min(3000, int(house_num)) / 30.0))
    for i in tqdm(range(total_page), desc=key_):
        html = sess.get(url.format(value_, i+1)).text
        soup = BeautifulSoup(html, 'lxml')
        info_collect = soup.find_all(class_="info clear")
        
        for info in info_collect:
            info_dic = {}
            # 行政区
            info_dic['area'] = key_
            # 房源的标题
            info_dic['title'] = re_match('target="_blank">(.*?)
                    

你可能感兴趣的:(爬虫+可视化——链家杭州二手房房源信息)