BeautifulSoup库TapTap评论爬虫

发布于:2024-05-07 ⋅ 阅读:(21) ⋅ 点赞:(0)

最近在写关于评论数据主题建模和情感分析的作业,本来想用八爪鱼直接爬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)