最近在写关于评论数据主题建模和情感分析的作业,本来想用八爪鱼直接爬TapTap的评论数据,但是自动识别网页总是定位错误,还是回归BeautifulSoup和Request来进行评论内容的爬取,具体操作步骤如下

导入所需的库

import re

import requests

import pandas as pd

from bs4 import BeautifulSoup

BeautifulSoup库:BeautifulSoup是基于re开发的,可以从HTML或XML文件中提取数据的python库;它能够通过转换器实现惯用的文档导航、查找、修改文档的方式 ,可以提高提取数据的效率和爬虫开发的效率。

Requsts库:equests是基于urllib,使用Apache2 Licensed许可证开发的HTTP库。其在python内置模块的基础上进行了高度封装,使得Requests能够模拟浏览器的需求,轻松完成浏览器相关的任何操作。

获取User-Agent

首先进入需要爬取的评论界面,复制网页URL,这里以无限暖暖 - 游戏评价 - TapTap为例,进入界面后,按F12或者鼠标右键选择检查,打开控制台,选择网络。

刷新网页,即可看到刷新出review

点击review,拉到最下方,可以看到User-Agent,复制下来,它很重要

分析HTML结构

Ctrl+Shift+C,选择页面中的评论数据

复制 outerHTML,这里太长了就只用图片来表示

-------------------------------------------------------------------------------------------------------------------------------- 

 (不过这里用不到)

我们可以发现,所有的评论都嵌套在text-box__content中,就find_all来匹配就好了。我一开始误以为嵌套在heading-m14-w14中,结果爬出来的评论数据每一条评论都重复,大家不要犯这种低智的错啊。

爬虫代码

# 定义函数 get_taptap_reviews,用于爬取评论

def get_taptap_reviews(url, user_agent, max_reviews=300):

# 设置请求头,模拟浏览器访问

headers = {'User-Agent': user_agent}

reviews = []

page = 1

# 循环直到获取到足够的评论或者没有更多的评论页面

while len(reviews) < max_reviews:

# 构建评论页面的URL

review_url = f"{url}?page={page}"

# 发送GET请求

response = requests.get(review_url, headers=headers)

# 解析HTML内容

soup = BeautifulSoup(response.text, 'html.parser')

# 查找所有的评论div

review_divs = soup.find_all('div', class_='text-box__content')

# 如果没有找到评论,则退出循环

if len(review_divs) == 0:

break

# 遍历每个评论div

for review_div in review_divs:

# 获取评论文本并去除前后空白

review = review_div.text.strip()

# 将评论添加到列表中

reviews.append(review)

# 如果已经获取到足够的评论,则退出循环

if len(reviews) >= max_reviews:

break

# 翻页

page += 1

# 返回评论列表

return reviews

# 定义函数 save_reviews_to_excel,用于将评论保存到Excel文件

def save_reviews_to_excel(reviews, filename='taptap.xlsx'):

# 将评论列表转换为DataFrame

df = pd.DataFrame(reviews, columns=['comment'])

# 将DataFrame保存到Excel文件

df.to_excel(filename, index=False)

主程序如下

# 主程序入口

if __name__ == "__main__":

# 目标网页URL

url = "https://www.taptap.cn/app/247283/review"

# 模拟浏览器的User-Agent

user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"

# 设置最大爬取评论数为300

max_reviews = 300

# 调用函数爬取评论

reviews = get_taptap_reviews(url, user_agent, max_reviews)

# 调用函数将评论保存到Excel文件

save_reviews_to_excel(reviews)

在实际操作的过程中,需要将user_agent换成你自己的。 

完整代码

import requests

from bs4 import BeautifulSoup

import re

import pandas as pd

# 定义函数 get_taptap_reviews,用于爬取评论

def get_taptap_reviews(url, user_agent, max_reviews=300):

# 设置请求头,模拟浏览器访问

headers = {'User-Agent': user_agent}

reviews = []

page = 1

# 循环直到获取到足够的评论或者没有更多的评论页面

while len(reviews) < max_reviews:

# 构建评论页面的URL

review_url = f"{url}?page={page}"

# 发送GET请求

response = requests.get(review_url, headers=headers)

# 解析HTML内容

soup = BeautifulSoup(response.text, 'html.parser')

# 查找所有的评论div

review_divs = soup.find_all('div', class_='text-box__content')

# 如果没有找到评论,则退出循环

if len(review_divs) == 0:

break

# 遍历每个评论div

for review_div in review_divs:

# 获取评论文本并去除前后空白

review = review_div.text.strip()

# 将评论添加到列表中

reviews.append(review)

# 如果已经获取到足够的评论,则退出循环

if len(reviews) >= max_reviews:

break

# 翻页

page += 1

# 返回评论列表

return reviews

# 定义函数 save_reviews_to_excel,用于将评论保存到Excel文件

def save_reviews_to_excel(reviews, filename='taptap.xlsx'):

# 将评论列表转换为DataFrame

df = pd.DataFrame(reviews, columns=['comment'])

# 将DataFrame保存到Excel文件

df.to_excel(filename, index=False)

# 主程序入口

if __name__ == "__main__":

# 目标网页URL

url = "https://www.taptap.cn/app/247283/review"

# 模拟浏览器的User-Agent

user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"

# 设置最大爬取评论数为300

max_reviews = 300

# 调用函数爬取评论

reviews = get_taptap_reviews(url, user_agent, max_reviews)

# 调用函数将评论保存到Excel文件

save_reviews_to_excel(reviews)

相关链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。