前言
随着互联网技术的发展,数据抓取成为了获取大量公开数据的重要手段。本文将介绍如何利用 Python 编程语言结合 DrissionPage
和自定义的 DataRecorder
模块,实现对新发地市场蔬菜价格数据的自动化抓取,并将抓取到的数据保存至 CSV 文件中。
目标网站
1. 准备工作
在开始之前,请确保您的环境中已安装了 DrissionPage
库。如果没有安装,可以通过 pip 安装:
pip install DrissionPage
同时,您需要创建一个名为 DataRecorder.py
的模块,该模块负责数据的记录功能。这里我们假设您已经有了这个模块,并且它支持向 CSV 文件追加数据的功能。
2. 导入必要的库
首先,我们需要导入本项目所需的库:
from DrissionPage import ChromiumPage
from DataRecorder import Recorder
3. 创建数据记录器
接下来,我们将创建一个 Recorder
实例,用于后续将数据记录到 CSV 文件中:
# 创建 Recorder 实例,用于记录数据到 CSV 文件
recorder = Recorder(path="./data.csv", cache_size=500)
# 设置 CSV 文件的表头
recorder.add_data(['品名', '最低价', '平均价', '最高价', '规格', '产地', '单位', '发布日期'])
4. 初始化浏览器对象
使用 ChromiumPage
类初始化一个浏览器实例,以便于后续操作网页:
# 初始化 ChromiumPage 对象
page = ChromiumPage()
5. 监听网络请求
为了捕获页面加载时发送的网络请求,特别是那些包含了我们所需数据的请求,我们需要开启监听:
# 开始监听指定 URL 的网络请求
page.listen.start('http://www.xinfadi.com.cn/getPriceData.html')
6. 访问目标页面
通过 get
方法访问目标网站,并等待页面开始加载:
# 请求目标页面
url = "http://www.xinfadi.com.cn/priceDetail.html"
page.get(url)
page.wait.load_start() # 等待页面加载开始
7. 抓取并处理数据
接下来是关键步骤,我们需要找到页面上的所有蔬菜类别,点击每个类别以触发数据加载,然后从网络请求中提取数据:
# 获取页面上所有蔬菜类目的元素
vegetable_style = page.eles("x://li[contains(@class,'lis')]")
对于每个蔬菜类别,执行以下操作:
# 遍历每个蔬菜类目
for style in vegetable_style:
style.click() # 点击类目以触发数据加载
page.wait.load_start() # 等待页面加载完成
# 等待数据包加载完成
resp = page.listen.wait()
data = resp.response.json() # 解析响应体为 JSON 格式
遍历返回的数据列表,提取每条记录的信息:
# 遍历数据列表中的每个项目
for item in data['list']:
# 构建一个包含所需信息的字典
dict_item = {
'品名': item['prodName'],
'最低价': item['lowPrice'],
'平均价': item['avgPrice'],
'最高价': item['highPrice'],
'规格': item['specInfo'],
'产地': item['place'],
'单位': item['unitInfo'],
'发布日期': item['pubDate']
}
# 将数据添加到 Recorder 中
recorder.add_data(dict_item)
# 打印处理后的数据
print(dict_item)
8. 保存数据
最后,确保所有数据都被正确地写入到 CSV 文件中:
# 最后,将所有缓存的数据写入文件
recorder.record()
运行结果
总结
通过上述步骤,我们成功地实现了对新发地市场蔬菜价格数据的自动化抓取,并将结果保存到了本地的 CSV 文件中。此过程不仅提高了工作效率,还保证了数据的准确性和时效性。
如果有爬虫的需求的话可以到,【python爬虫 文档、图片等数据抓取】
请注意,希望合理设置请求间隔时间,避免对服务器造成过大负担。
本代码仅用于学习和研究目的,不得用于商业用途或其他非法活动。
使用者自行承担因不当使用代码而产生的任何法律责任