我的爬虫学习(小红书评论区)

该文章已生成可运行项目,

一、前期准备工作

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&note_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&note_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&note_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&note_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)
本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值