看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
Pandas在配合做网络数据采集爬虫时,也能发挥其优势,可承担数据调用、数据存储的工作。将数据存入DataFrame后,可直接进入下一步分析。本例以获取某房产网站中房价为目标,来体验一下Pandas的便捷之处。
首先利用requests(需要安装)库获取单个小区的平均价格:
import pandas as pd
import requests # 安装:pip install requests
# 创建一个Session
s = requests.Session()
# 访问小区页面
xq = s.get('https://bj.lianjia.com/xiaoqu/1111027382589/')
# 查看页面源码
xq.text
# 找到价格位置附近的源码为:
# <span class="xiaoquUnitPrice">95137</span>
# 切分与解析
xq.text.split('xiaoquUnitPrice">')[1].split('</span>')[0]
# '93754'
最终得到这个小区的平均房价。这里使用了将目标信息两边的信息进行切片、形成列表再读取的方法。也可以用第三方库Beautiful Soup 4来解析。Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库,它能够通过解析源码来方便地获取指定信息。
我们构建获取小区名称和平均房价的函数:
# 获取小区名称的函数
def pa_name(x):
xq = s.get(f'https://bj.lianjia.com/xiaoqu/{x}/')
name = xq.text.split('detailTitle">')[1].split('</h1>')[0]
return name
# 获取平均房价的函数
def pa_price(x):
xq = s.get(f'https://bj.lianjia.com/xiaoqu/{x}/')
price = xq.text.split('xiaoquUnitPrice">')[1].split('</span>')[0]
return price
接下来利用Pandas执行爬虫获取信息:
# 小区列表
xqs = [1111027377595, 1111027382589,
1111027378611, 1111027374569,
1111027378069, 1111027374228,
116964627385853]
# 构造数据
df = pd.DataFrame(xqs, columns=['小区'])
# 爬取小区名
df['小区名'] = df.小区.apply(lambda x: pa_name(x))
# 爬取房价
df['房价'] = df.小区.apply(lambda x: pa_price(x))
# 查看结果
df
'''
小区 小区名 房价
0 1111027377595 瞰都国际 73361
1 1111027382589 棕榈泉国际公寓 93754
2 1111027378611 南十里居 56459
3 1111027374569 观湖国际 88661
4 1111027378069 丽水嘉园 76827
5 1111027374228 泛海国际碧海园 97061
6 116964627385853 东山condo 145965
'''
可以先用Python的类改造函数,再用链式方法调用:
# 爬虫类
class PaChong(object):
def __init__(self, x):
self.s = requests.session()
self.xq = self.s.get(f'https://bj.lianjia.com/xiaoqu/{x}/')
self.name = self.xq.text.split('detailTitle">')[1].split('</h1>')[0]
self.price = self.xq.text.split('xiaoquUnitPrice">')[1].split('</span>')[0]
# 爬取数据
(
df
.assign(小区名=df.小区.apply(lambda x: PaChong(x).name))
.assign(房价=df.小区.apply(lambda x: PaChong(x).price))
)
以上网站可能会改版,代码不适用时需要调整爬虫代码。
(完)
关于作者:李庆辉,数据产品专家,某电商公司数据产品团队负责人,擅长通过数据治理、数据分析、数据化运营提升公司的数据应用水平。
注:此案例收录在《深入浅出Pandas:利用Python进行数据处理与分析》17.3.3 小节。
推荐语:这是一本全面覆盖了Pandas使用者的普遍需求和痛点的著作,基于实用、易学的原则,从功能、使用、原理等多个维度对Pandas做了全方位的详细讲解,既是初学者系统学习Pandas难得的入门书,又是有经验的Python工程师案头必不可少的查询手册。
更新时间:Aug. 18, 2024, 3:38 p.m. 标签:pandas python 爬虫 房价