BeautifulSoup库TapTap评论爬虫

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

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用Python爬取Taptap论坛数据,可以按照以下步骤进行: 1. 安装必要的Python:requests、BeautifulSoup和pandas。可以使用pip命令来安装这些。 2. 找到需要爬取的Taptap论坛页面的URL。例如,我们可以爬取“神都夜行录”游戏的论坛页面:https://www.taptap.com/app/1369/topic。 3. 使用requests发送HTTP请求,获取网页HTML代码。可以使用get()方法来发送GET请求,然后使用.text属性获取HTML代码。 4. 使用BeautifulSoup解析HTML代码,提取需要的数据。可以使用find()或find_all()方法来查找HTML标签,然后使用.text属性获取标签的文本内容。 5. 将提取的数据存储到CSV文件中。可以使用pandas创建DataFrame对象,然后使用to_csv()方法将数据保存为CSV文件。 以下是一个示例代码,可以爬取“神都夜行录”游戏的论坛页面,并将发帖人、发帖时间和帖子内容保存到CSV文件中: ```python import requests from bs4 import BeautifulSoup import pandas as pd url = 'https://www.taptap.com/app/1369/topic' response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') posts = [] for post in soup.find_all('div', class_='topic-item'): author = post.find('div', class_='author-name').text.strip() time = post.find('span', class_='created-at').text.strip() content = post.find('div', class_='topic-item-body').text.strip() posts.append({'author': author, 'time': time, 'content': content}) df = pd.DataFrame(posts) df.to_csv('shendu.csv', index=False) ``` 运行以上代码后,将会在当前目录下生成一个名为“shendu.csv”的CSV文件,其中包含了论坛页面中所有帖子的发帖人、发帖时间和帖子内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值