使用DrissionPage模块进行爬取,DrissionPage是一个自动化的模块,可以模拟人的操作,进行翻页等操作,比传统爬取更加方便
在使用DrissionPage之前,需要先初始化路径运行下面的代码,需要将r'D:\Chrome\Chrome.exe' 替换为本地Chrome的执行路径,如果没有Chrome浏览器,也可以切换其他浏览器
from DrissionPage import ChromiumOptions
path = r'D:\Chrome\Chrome.exe' # 请改为你电脑内Chrome可执行文件路径
ChromiumOptions().set_browser_path(path).save()
通过开发者工具找到评论数据对应的请求网址,全部评价,定位页面等

具体代码
# 导入自动化模块
import time
from DrissionPage import ChromiumPage
# 导入csv
import csv
# 创建文件对象
f = open('data.csv',mode='w',encoding='utf-8',newline='')
# 字典写入方法
csv_writer = csv.DictWriter(f,fieldnames=[
'昵称',
'用户等级',
'评分',
'评论',
'时间',
'产品',
])
# 写入表头
csv_writer.writeheader()
# 打开浏览器(实例化浏览器对象)
dp = ChromiumPage()
# 访问网站
dp.get('https://item.jd.com/10058384218794.html')
# 等待页面加载
time.sleep(3)
# 监听数据包
dp.listen.start('client.action')
# 点击全部评价
dp.ele('css:.all-btn').click()
# 构建循环翻页
for page in range(1,201):
print(f'正在采集第{page}页的数据')
# 等待数据包加载
r = dp.listen.wait()
# 获取数据内容
json_data = r.response.body
# 键值对取值,提取评论所在列表
datas = json_data['result']['floors'][2]['data']
# for循环提取列表元素
for index in datas:
try:
dit = {
'昵称':index['commentInfo']['userNickName'],
'用户等级': index['commentInfo']['officerLevel'],
'评分': index['commentInfo']['commentScore'],
'评论': index['commentInfo']['commentData'],
'时间': index['commentInfo']['commentDate'],
'产品': index['commentInfo']['wareAttribute'][0]['颜色'],
}
# 写入数据
csv_writer.writerow(dit)
print(dit)
except:
pass
# 定位页面
tab = dp.ele('css:._rateListContainer_1ygkr_45')
# 下滑
tab.scroll.to_bottom()
运行代码即可爬取出评论,并输出为.csv文件

浙公网安备 33010602011771号