文章目录

  • 1.概述
  • 2.数据采集
  • 3.数据清洗
    • 3.1.读取数据
    • 3.2.去掉车位(地下室)数据
    • 3.3.房源信息解析
  • 4.数据处理及可视化
    • 4.1.各地区二手房源数
    • 4.2.各地区二手房均价
    • 4.3.各地区二手房总价
    • 4.4.各地区二手房面积
    • 4.5.各地区二手房年限
    • 4.6.各地区二手房【价格-地区】数量分布
    • 4.7.各地区二手房【户型-价格】数量分布
    • 4.8.各地区二手房【户型-地区】数量分布
    • 4.9.各地区二手房【户型-地区】均价分布
  • 5.房源标题及小区词云
  • 6.总结

1.概述

最近看到一句话,感觉很扎心,这句话是”任何一个男孩子小时候的梦想,绝对不是买套房“。

其实,刚从象牙塔步入社会的时候,不曾想过房的事情。记得2016年房价猛涨,方才对房有了一些认知而已。直到随着年龄的增长,房子的故事便不得不需要展开了。

北上广深如今的房价又到了什么样惊人的数值呢?从贝壳找房最新的贝壳指数来看:北京是6.13万,上海5.62万,广州2.86万,深圳7.05万

今天,我们从贝壳找房 爬取了 8万+二手房源信息,看看在北京的二手房都是什么样的存在。

通过本篇,大家可以在了解北京二手房多维度信息的同时学习Python的re正则表达式、pandas数据处理以及绘图库(pyecharts、seaborn)柱状图+饼图+直方图+箱线图+map+热力图+堆叠图和高德api的使用等。

数据说明

数据来源:贝壳找房-二手房
数据日期:2020年12月28日
数据量级:82,346(含车位,数据处理阶段清洗)

工具环境

Python 3.8.5

用途
requests 爬虫请求网站数据
re 正则解析网页数据及数据清洗
pandas 数据清洗及统分
pyecharts 绘图
matplotlib 绘图
seaborn 绘图

2.数据采集

贝壳找房的数据爬取比较简单,简单的翻页规律和HTML网页文本解析。我们编写for循环,用requests请求数据,再用re正则表达式进行房源数据解析即可。

鉴于整个爬虫过程并不复杂,这里亦不细说,后续专题介绍如何获取全部数据。

房源数据解析代码如下:

# 请求网页数据函数
def get_html(url, proxies):try:rep = requests.get(url, headers= header, proxies= proxies, timeout=6)except Exception as e :print(e)proxies = get_proxies()rep = requests.get(url, headers= header, proxies= proxies, timeout=6)while  rep.status_code != 200:proxies = get_proxies()rep = requests.get(url, headers= header, proxies= proxies, timeout=6)        html = rep.texthtml = re.sub('\s', '', html) # 将html文本中非字符数据去掉        return html,proxies
# 循环请求每页数据
num = 0
for page in range(1,pages+1):items = []time.sleep(random.random())info_url = f'{url}/pg{page}'try:info_html, proxies = get_html(info_url, proxies)except Exception as e:print(e)continuesellListContent = re.findall(r'<ulclass="sellListContent"log-mod="list">(.*?)</ul>', info_html)[0]Lists = re.findall(r'<liclass="clear">(.*?)</li>', sellListContent)for List in Lists:try:# 获取房屋信息item = {}item['标题'] = re.findall(r'detail"title="(.*?)"data-hreftype=', List)[0]item['房子ID'] = re.findall(r'housedel_id=(\d+)&', List)[0]item['地址'] = re.findall(r'<ahref="(.*?)">(.*)</a>', List)[0][1]item['详情页'] = re.findall(r'<ahref="(.*?)">(.*)</a>', List)[0][0]item['详情'] = re.findall(r'<spanclass="houseIcon"></span>(.*?)</div>', List)[0]item['总价'] = re.findall(r'<divclass="totalPrice"><span>(\d+\.?\d*)</span>(.*?)</div>', List)[0][0]item['总价单位'] = re.findall(r'<divclass="totalPrice"><span>(\d+\.?\d*)</span>(.*?)</div>', List)[0][1]item['均价'] = re.findall(r'<divclass="unitPrice".*<span>(.*?)</span></div></div></div>', List)[0]item['关注人数'] = re.findall(r'<spanclass="starIcon"></span>(.*?)</div>', List)[0]item['地区'] = areaNameitem['价格区间'] = priceRangeitem['户型'] = layoutitems.append(item)num = num+1print(f'{num}个房子信息已经采集!')except Exception as e:print(e)print(item)continue

说明

由于翻页最多支持100页,每页约30个房源数据,如果我们想获取全部的数据,需要注意两点:

  • 可以通过进行更细颗粒度的筛选后再进行url的组合,一般来说可以通过 区域 和 价格区间 和 户型 进行组合即可,我这边即是采用这种组合策略;
  • 由于网站对同IP的访问频率和次数是有限制的,因此需要用到代理IP,购买付费的代理IP就可满足学习需求了,在requests.get()函数中加上proxies参数即可。

3.数据清洗

这部分我们用到pandasre,主要是过滤非住宅房源的车位数据信息,解析房源更多有用信息。

3.1.读取数据

import pandas as pd
import redf = pd.read_excel('贝壳在售二手房数据20201228.xlsx')
df.sort_values(by='总价')

我们可以看到,在原始数据中 详情包含的信息较多,比如楼层、户型、面积、建筑年份和朝向等等,对于地下室和底层的部分大多数都是车位,索性就不考虑这部分数据,这部分我们后续进行清洗。同时,在均价和关注人数中也都包含更多信息需要我们解析出来。

3.2.去掉车位(地下室)数据

# 车位条件,不一定严谨
mask = ((df['详情'].str.contains('地下室'))
#         & (df['详情'].str.contains('1室'))
#         &(~df['详情'].str.contains(r'地下室\(共[2-9]|[1-9]\d+层\)')))|((df['详情'].str.contains('底层')) & (df['详情'].str.contains('1室'))&(~df['详情'].str.contains(r'底层\(共[2-9]|[1-9]\d+层\)')))
# 房子
house = df[~mask]
# 车位
carport = df[mask]
carport.sort_values(by='总价')

哈哈,有点尴尬,部分别墅被误处理了。不过没事,别墅咱们就先不考虑,毕竟更买不起!

3.3.房源信息解析

# 详情信息解析
s = '中楼层(共9层)|2007年建|1室1厅|24.78平米|北'
# s = '地下室|2014年建|1室0厅|39.52平米|东'
# s = '底层(共2层)5室3厅|326.56平米|东南西北'
# s = '地下室1室0厅|11.9平米|南'
# re.split(r'(.+?)(\(共(.*)层\))*(\|((.*)年建)*\|)*?(\d+室.*?)\|(.*)平米\|(.*)',s)
re.split(r'(.+?)(?:\(共(.*)层\))?(?:\|(.*)年建\|)*?(\d+室.*?)\|(.*)平米\|(.*)',s)

我在操作的时候用的是注释掉的正则表达式部分,后来在交流群里询问大佬明神后知道了**?

Python爬虫 | 爬取贝壳找房8万+二手房源,看看普通人在北京买房是有多难!相关推荐

  1. python爬取贝壳找房之北京二手房源信息

    所用库 requests xpath解析库 multiprocessing多进程 pandas库用于保存csv文件 实战背景 本文首发于:python爬取贝壳找房之北京二手房源信息 主要是为了做北京二 ...

  2. python爬虫爬取(中国空气质量在线监测分析平台)北京PM2.5,2013年至2018年的数据

    要爬取的数据网站如下图所示: 即是爬取该网站2013年12月2日至2018年11月份北京空气质量指数历史数据,其中要爬起的 内容如PM2.5,So2等,即是从这个网页内置的表格中爬取,因为该网站比较有 ...

  3. python爬虫 爬取贝壳网中所有行政区内的二手房 将获取信息存于excle中--Excel文件 含分析

    -- coding: utf-8 -- """ Created on Sat Feb 29 19:13:37 2020 @author: acliu "&quo ...

  4. python爬虫——爬取房天下

    python爬虫--爬取房天下 话不多说,直接上代码! import requests as req import time import pandas as pd from bs4 import B ...

  5. python爬虫数据分析可以做什么-python爬虫爬取的数据可以做什么

    在Python中连接到多播服务器问题,怎么解决你把redirect关闭就可以了.在send时,加上参数allow_redirects=False 通常每个浏览器都会设置redirect的次数.如果re ...

  6. python网易云_用python爬虫爬取网易云音乐

    标签: 使用python爬虫爬取网易云音乐 需要使用的模块 只需要requests模块和os模块即可 开始工作 先去网易云音乐网页版找一下你想要听的歌曲点击进去.按键盘F12打开网页调试工具,点击Ne ...

  7. 运用Python爬虫爬取一个美女网址,爬取美女图

    运用Python爬虫爬取一个美女网址,爬取美女图 要运用到的python技术: 导入库 1.request 发送请求,从服务器获取数据 2.BeautifulSoup 用来解析整个网页的源代码 imp ...

  8. Python爬虫爬取微信朋友圈的方法,感兴趣的朋友可以了解下

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 小雨 | 作者 python教程 | 来源 接下来,我们将实现微信朋友圈的 ...

  9. Python爬虫---爬取腾讯动漫全站漫画

    Python爬虫---爬取腾讯动漫全站漫画 操作环境 网页分析 明确目标 提取漫画地址 提取漫画章节地址 提取漫画图片 编写代码 导入需要的模块 获取漫画地址 提取漫画的内容页 提取章节名 获取漫画源 ...

最新文章

  1. 【转】Linux世界驰骋——文件系统和设备管理
  2. python面试-Python面试中常见的3个问题
  3. Hash函数及其应用
  4. console java_Java Console format()方法与示例
  5. pycharm pyqt5 pyrrc_编程基础 | Pycharm安装、配置、快捷键
  6. SVN-关于分支创建合并
  7. vc++ 提取网页上的文字_用奢悦vc一般多久能反黑
  8. mysql如何时间减10分钟_mysql – 从时间值中减去分钟数
  9. linux+tar+man,Linux常用命令
  10. CodeForces - 948C(前缀和 + 二分)
  11. iTextSharp 使用详解(转)
  12. 【机器学习】Weighted LSSVM原理与Python实现:LSSVM的稀疏化改进
  13. 中国第一程序员--求伯君
  14. 计算机装配方案之游戏发烧型,5000元Intel八代i5-8500配RX580电脑配置 畅玩各类中大型游戏...
  15. 关闭445端口的方法
  16. 植物大战僵尸变态辅助开发系列教程(E语言实现和VC6实现)(中)
  17. 免费ICP域名备案查接口
  18. 比较LMS和RLS算法的性能
  19. kotlin的必修之路
  20. 幻想乡三连C:狂飙突进的幻想乡

热门文章

  1. AndroidStudio Task不显示
  2. sqlmap渗透实战进阶技巧
  3. Win11如何清除最近打开过的文件记录?
  4. git如何撤销某次提交记录
  5. Git合并两个分支的步骤
  6. 【v-on】一个元素绑定多个事件以及一个事件绑定多个函数的两种写法
  7. 中国的地理位置的表述
  8. 情侣生日纪念日倒数提醒的便签
  9. uni-app 异形轮播
  10. python抢票开发——设备预约助手实现