python房子代码_基于python的链家小区房价爬取——仅需60行代码!
简介
首先打开相关网页(北京链家小区信息)。
注意本博客的代码适用于爬取某个城市的小区二手房房价信息。
如果需要爬取其他信息,可修改代码,链家的数据获取的基本逻辑都差不多。
效果展示
因为只需要60行左右的代码,所以就不写入excel了,直接在终端打印出来。
效果如下,为了展示美观我加了个json.dumps。
分析网页
用谷歌浏览器打开北京链家小区信息,如果需要其他城市的可以直接替换。
首先可以看看我们要爬取的信息。我这次主要获取的有小区名、小区位置、房价。
进入页面后Ctrl+U查看网页源代码,在源代码界面Ctrl+F搜索小区名(也可以搜索其他的)先定位到相关的代码处。
经过简单的观察,我们就可以定位到我们所需要的所有信息(链家还是挺好爬取的……)。
可以看下图,该条目下我们所需的所有信息一下都被找到了。
然后把前后的代码拷贝一下,经过一系列整理,得到我们要用到的正则规则。
# 正则表达式
# 小区名
name_rule = r'lianjia.com/xiaoqu/[0-9]*/" target="_blank">(.*?)' #[0-9]* 表示任意多个数字 .*? 匹配一次
name = re.findall(name_rule, html)
# 房价
price_rule = r'
price = re.findall(price_rule, html)
# 小区所在区域
district_rule = r'class="district" title=".*?">(.*?)'
district = re.findall(district_rule, html)
# 小区所在商圈
bizcircle_rule = r'class="bizcircle" title=".*?">(.*?) '
bizcircle = re.findall(bizcircle_rule, html)
核心问题已经轻松解决了,接下来可以在前面用request加上页面源代码的获取代码,这样才能实现爬虫。
url = str(url)
html = requests.get(url).text # 获取页面原代码
好了,基本的分析已经完成了。
代码思路
前文中网页的分析已经完整了,核心的爬取思路已经有了。
接下来还需要完成的工作是:1. 实现爬虫的自动化,比如说自己翻页啊什么的。2. 把爬取到的n个页面的数据整合并且整理展示出。
先把需要的库导入。这里用到json主要是为了用json.dumps美化数据的展示。
import requests
import re
import time
import json
一、首先我需要能够爬取单页的数据。
主要流程如下:输入相关的url,读取源代码,用正则表达式筛选我们需要的数据(小区名、房价、区域、商圈)、让数据一一对应(如果不一一对应会打印“参数匹配失败”。
整个def最后返回一个字典,字典的key是小区名,字典的value是一个数组(包含了区域、商圈、房价信息)。
def get_housing_price(url):
url = str(url)
html = requests.get(url).text # 获取页面原代码
# 正则表达式
# 小区名
name_rule = r'lianjia.com/xiaoqu/[0-9]*/" target="_blank">(.*?)' #[0-9]* 表示任意多个数字 .*? 匹配一次
name = re.findall(name_rule, html)
# 房价
price_rule = r'
price = re.findall(price_rule, html)
# 小区所在区域
district_rule = r'class="district" title=".*?">(.*?)'
district = re.findall(district_rule, html)
# 小区所在商圈
bizcircle_rule = r'class="bizcircle" title=".*?">(.*?) '
bizcircle = re.findall(bizcircle_rule, html)
# 建立小区名和房价对应的字典
housing_price_dict = {}
if len(name) == len(price) == len(district) == len(bizcircle):
for i in range(len(name)):
infor = [] # 存放信息的列表
if price[i] != '暂无': #因为存在暂无,把除了暂无房价数据以外的房价变成浮点型
floated = float(price[i])
else:
floated = '暂无'
infor.append(district[i])
infor.append(bizcircle[i])
infor.append(floated)
housing_price_dict[name[i]] = infor # 遍历生成键值
else:
print('参数匹配失败')
return housing_price_dict
二、遍历输入的n个页面,并且把n个页面获取的数据字典整合为一个。
上面已经写了爬取一个页面的def,现在要在上面def的基础上自动生成url并且爬取n个页面并且整合n个页面的数据。
首先先写一个合并两个字典的def放在这,等下用得着。
# 合并字典
def merge_dict(dict1, dict2):
merged = {**dict1, **dict2}
return merged
然后写一个遍历页面的def,经过简单的观察切换页面只需要在原来的url后面+pg+数字就行。
下面这个def的思路是输入起始和中止页,用for遍历起始和中止页之间的所有页面,然后用一里面的def爬取每个单页的数据,最后把每个单页得到的字典整合起来。
# 整合房价字典
def merge_price_dict(start, end):
initial = {}
for pg in range(start, end+1): # 设置起始和中止界面
url = f'https://bj.lianjia.com/xiaoqu/pg{pg}/'
prices = get_housing_price(url)
time.sleep(1)
initial = merge_dict(initial, prices)
return initial
三、举个栗子。
拥有了以上的三个def就可以完成数据的爬取和打印工作了。下面举个简单的栗子谈谈如何串联三个def。
只需要三行(如果大家需要自己该代码写入excel之类的话,可以直接放弃第二行第三行):
第一行:获取3-5页里的房价数据并且整合为一个字典。
第二行:美化一下第一行的字典(主要为了打印出来比较好看)。
第三行:打印。
price_dict = merge_price_dict(3, 5)
formation_dict = json.dumps(price_dict, indent=4, ensure_ascii=False) # 输出美化
print(formation_dict)
打印出来结果长这样。
完整代码
import requests
import re
import time
import json
# 爬取房价并且返回一个页面的字典
def get_housing_price(url):
url = str(url)
html = requests.get(url).text # 获取页面原代码
# 正则表达式
# 小区名
name_rule = r'lianjia.com/xiaoqu/[0-9]*/" target="_blank">(.*?)' #[0-9]* 表示任意多个数字 .*? 匹配一次
name = re.findall(name_rule, html)
# 房价
price_rule = r'
price = re.findall(price_rule, html)
# 小区所在区域
district_rule = r'class="district" title=".*?">(.*?)'
district = re.findall(district_rule, html)
# 小区所在商圈
bizcircle_rule = r'class="bizcircle" title=".*?">(.*?) '
bizcircle = re.findall(bizcircle_rule, html)
# 建立小区名和房价对应的字典
housing_price_dict = {}
if len(name) == len(price) == len(district) == len(bizcircle):
for i in range(len(name)):
infor = [] # 存放信息的列表
if price[i] != '暂无': #因为存在暂无,把除了暂无房价数据以外的房价变成浮点型
floated = float(price[i])
else:
floated = '暂无'
infor.append(district[i])
infor.append(bizcircle[i])
infor.append(floated)
housing_price_dict[name[i]] = infor # 遍历生成键值
else:
print('参数匹配失败')
return housing_price_dict
# 合并字典
def merge_dict(dict1, dict2):
merged = {**dict1, **dict2}
return merged
# 整合房价字典
def merge_price_dict(start, end):
initial = {}
for pg in range(start, end+1): # 设置起始和中止界面
url = f'https://bj.lianjia.com/xiaoqu/pg{pg}/'
prices = get_housing_price(url)
time.sleep(1)
initial = merge_dict(initial, prices)
return initial
price_dict = merge_price_dict(3, 5)
formation_dict = json.dumps(price_dict, indent=4, ensure_ascii=False) # 输出美化
print(formation_dict)
如果需要爬取不同城市的房价数据,可以修改第52行的url。
你学会了吗 如需源码获取点击:源码
python房子代码_基于python的链家小区房价爬取——仅需60行代码!相关推荐
- python爬取南京市房价_基于python的链家小区房价爬取——仅需60行代码
简介 首先打开相关网页(北京链家小区信息). 注意本博客的代码适用于爬取某个城市的小区二手房房价信息. 如果需要爬取其他信息,可修改代码,链家的数据获取的基本逻辑都差不多. 效果展示 因为只需要60行 ...
- 【python】链家小区信息爬取
首先在主页面中爬取详情页面的url 主页面示例: 详情页面示例: 在详情页面中我们可以爬取到小区的名称.房价.建筑年代.建筑类型.物业费用等各类信息 详细代码如下: import pandas as ...
- 【Python】基于Python获取链家小区房价信息及其POI数据
文章目录 1 简介 2 效果展示 3 分析网页 4 代码思路 5 完整代码 6 相关文章 1 简介 本来要先发在csdn上的,但是之前学弟催我给他公众号写点东西,我就把这篇博客首发在他的公众号上,现在 ...
- python加密敏感信息_仅需10行代码,使用python加密用户敏感数据
原标题:仅需10行代码,使用python加密用户敏感数据 数据分析师必须要遵守的一个规则就是数据保密,但在跨部门沟通的时候,难免会有数据泄露的情况,所以,对于用户的姓名.手机号.地址等敏感信息,一般需 ...
- python爬虫代码1000行-最精简的爬虫 --仅需4行代码(python)
最精简的爬虫 --仅需4行代码(python) 刚刚整理了下爬虫系列,于是乎就开始了第一次的技术分享 今天,我们主要讲述的是思路,思路,思路. 相比起,直接贴代码,思路显的更为重要 当初,自己的坑,希 ...
- 最简单的爬虫代码 python_最精简的爬虫 --仅需4行代码(python)
最精简的爬虫 --仅需4行代码(python) 刚刚整理了下爬虫系列,于是乎就开始了第一次的技术分享 今天,我们主要讲述的是思路,思路,思路. 相比起,直接贴代码,思路显的更为重要 当初,自己的坑,希 ...
- python简单爬虫代码-最精简的爬虫 --仅需4行代码(python)
最精简的爬虫 --仅需4行代码(python) 刚刚整理了下爬虫系列,于是乎就开始了第一次的技术分享 今天,我们主要讲述的是思路,思路,思路. 相比起,直接贴代码,思路显的更为重要 当初,自己的坑,希 ...
- OpenCV-Python实战(14)——人脸检测详解(仅需6行代码学会4种人脸检测方法)
OpenCV-Python实战(14)--人脸检测详解(仅需6行代码学会4种人脸检测方法) 0. 前言 1. 人脸处理简介 2. 安装人脸处理相关库 2.1 安装 dlib 2.2 安装 face_r ...
- 神经网络 c++ 源码 可以直接复制运行,提供数据集,操作简单,最少仅需4行代码
神经网络 c++ 源码 可以直接复制运行,提供数据集,操作简单,最少仅需4行代码 本文的神经网络,让你省去Python那些花里胡哨的变量名,最少仅需4行代码即可完成自己的神经网络** 本文章采用c++ ...
最新文章
- 一年参加一次就够,全新升级的AI开发者大会议程出炉!
- 利用sharding-jdbc分库分表
- CPU调度(CPU Scheduling)
- 170525、解决maven隐式依赖包版本问题
- IOS模拟登录之沙盒原理
- myeclipse 下搭建测试环境
- C++基础——有关引用的问题
- Base32 应用与原理解析
- MySQL练习题及答案
- iOS平台 - HBuilder - 自定义基座安装失败(return code=-402620395)
- latex 波浪线 ~
- 怎样在latex中插入jpg图片
- 单点登录(4):单点登录实现(附源码)
- IPv6闲谈-一起玩玩IPv6自动配置
- “改造” VS Code 编辑器,一起写个插件吧!
- php学生管理系统视频教程,学生管理系统——PHP
- virtual box 无法上网
- puzzle(1211)消除:2048最大分数
- 联发科MT7682芯片资料MT7682处理器资料整理
- MySQL子查询篇(精选20道子查询练习题)