一、前期准备工作
1、选择合适的网站
本次学习所选用的网站为“小红书”,爬取的主要内容为评论区,第一次爬取应当选择一些较为简单的内容
2、抓包分析
本次使用的浏览器为:谷歌浏览器,只需进入小红书网址,点击F12进入开发者模式

然后我们通过评论区的关键字来找到我们抓取位置的相关信息

然后根据所找到的标签,来确定我们所需要抓取哪些字段
二、代码实现
1、requests模块
(1)发送请求:模拟浏览器对url地址发起请求
(2)获取数据:获取浏览器响应的数据
(3)解析数据:提取我们需要的数据内容
(4)保存数据:将提取出的数据保存到本地
2、drissionpage模块
自动化模块:模拟人的行为对浏览器进行相关操作
(1)打开浏览器
(2)获取数据
(3)解析数据
(4)保存数据
两者之前的区别:requests和drissionpage的第一步和第二步有所不同
3、环境配置
本次采用drissionpage模块,首次运行时需要先配置环境
from DrissionPage import ChromiumOptions
path = r'C:\Program Files\Google\Chrome\Application\chrome.exe'
#引号内需改为你电脑里浏览器地址
ChromiumOptions().set_browser_path(path).save()
运行代码出现以下内容说明环境已配置成功,可以删掉代码了(一次运行,一直可用,前提:浏览器地址不变化)

4、打开浏览器,访问网页
网址复制浏览器的网址,可自行变更
#导入自动化模块
from DrissionPage import ChromiumPage
#打开浏览器(创建浏览器实例对象)
dp = ChromiumPage()
#访问网站
dp.get('https://www.xiaohongshu.com/explore/6a01bf74000000000701334d?note_flow_source=baidu¬e_flow_source=baidu&xsec_token=ABvzkTbDQlIu2uHkiFMZgBAU1Q2Y07WojCeaJ0GrgMze4=')
点击运行后,即可跳转到对应网页,注:第一次进入网页需要登录一下账号,否则可能抓取不到评论区数据
5、获取数据(监听数据包)
我们前面通过关键词搜索已经找到了对应字段的数据位置,网站再次加载时,我们可以通过数据包特征:comment/page 来定位其位置
修改后代码如下:
#导入自动化模块
from DrissionPage import ChromiumPage
#打开浏览器(创建浏览器实例对象)
dp = ChromiumPage()
#监听数据包
dp.listen.start('comment/page')
#访问网站
dp.get('https://www.xiaohongshu.com/explore/6a01bf74000000000701334d?note_flow_source=baidu¬e_flow_source=baidu&xsec_token=ABvzkTbDQlIu2uHkiFMZgBAU1Q2Y07WojCeaJ0GrgMze4=')
#等待数据包加载
r = dp.listen.wait()
#获取响应数据->得到json字典数据
json_data = r.response.body
print(json_data)
运行后可获得对应的json字典

6、解析数据
根据键值对,冒号左边的为【键】,冒号右边的数据为【值】
json字典为多层嵌套,所以需要分层解析
完整代码参考如下:
#导入自动化模块
import json
from DrissionPage import ChromiumPage
from datetime import datetime
#打开浏览器(创建浏览器实例对象)
dp = ChromiumPage()
#监听数据包
dp.listen.start('comment/page')
#访问网站
dp.get('https://www.xiaohongshu.com/explore/6a01bf74000000000701334d?note_flow_source=baidu¬e_flow_source=baidu&xsec_token=ABvzkTbDQlIu2uHkiFMZgBAU1Q2Y07WojCeaJ0GrgMze4=')
#等待数据包加载
r = dp.listen.wait()
#获取响应数据->得到json字典数据
json_data = r.response.body
print(json_data)
comments = json_data['data']['comments']
#for循环 获取列表里的元素
for index in comments:
"""在循环中获取每条评论的信息内容 """
# 获取index字典里所以的键
key_list = [i for i in index.keys()]
# 判断是否存在地区数据
if 'ip_location' in key_list:
ip_location = index['ip_location']
else:
ip_location = '未知'
#提取评论时间戳
t = str(index['create_time'])[:-3]
#把时间戳转成日期
date = str(datetime.fromtimestamp(int(t)))
dit = {
'昵称': index['user_info']['nickname'],
'日期': date, #时间戳
'点赞': index['like_count'],
'回复': index['sub_comment_count'],
'评论': index['content'],
'地区': index['ip_location'],
}
print(dit)
运行可得:

7、将数据保存成表格文件
文件保存为固定写法,点击运行后打开同目录下的‘data.csv’即可查看爬取网页的评论内容
完整代码如下,注意:写入数据应放在for循环内
#导入自动化模块
import json
from DrissionPage import ChromiumPage
from datetime import datetime
#导入csv模块
import csv
#创建文件对象
aa = open('data.csv', 'w', encoding='utf-8',newline='')
#字典写入法
csv_writer = csv.DictWriter(aa, fieldnames=['昵称','日期','点赞','回复','评论','地区'])
#写入表头
csv_writer.writeheader()
#打开浏览器(创建浏览器实例对象)
dp = ChromiumPage()
#监听数据包
dp.listen.start('comment/page')
#访问网站
dp.get('https://www.xiaohongshu.com/explore/6a01bf74000000000701334d?note_flow_source=baidu¬e_flow_source=baidu&xsec_token=ABvzkTbDQlIu2uHkiFMZgBAU1Q2Y07WojCeaJ0GrgMze4=')
#等待数据包加载
r = dp.listen.wait()
#获取响应数据->得到json字典数据
json_data = r.response.body
print(json_data)
comments = json_data['data']['comments']
#for循环 获取列表里的元素
for index in comments:
"""在循环中获取每条评论的信息内容 """
# 获取index字典里所以的键
key_list = [i for i in index.keys()]
# 判断是否存在地区数据
if 'ip_location' in key_list:
ip_location = index['ip_location']
else:
ip_location = '未知'
#提取评论时间戳
t = str(index['create_time'])[:-3]
#把时间戳转成日期
date = str(datetime.fromtimestamp(int(t)))
dit = {
'昵称': index['user_info']['nickname'],
'日期': date, #时间戳
'点赞': index['like_count'],
'回复': index['sub_comment_count'],
'评论': index['content'],
'地区': index['ip_location'],
}
# 写入数据
csv_writer.writerow(dit)
print(dit)
1261

被折叠的 条评论
为什么被折叠?



