Python抖音爬虫

代码:

# 导入自动化模块的安装:需要安装 pip install DrissionPage
from DrissionPage import ChromiumPage
# 导入时间转换模块
from datetime import datetime
# 导入csv模块,用于操作CSV文件
import csv
# 导入格式化输出模块
from pprint import pprint

# 使用with语句管理文件资源,自动关闭文件
with open('../excel文件/data.csv', mode='w', encoding='UTF-8', newline='') as f:
    # 创建字典写入对象,指定表头字段
    csv_writer = csv.DictWriter(f, fieldnames=['昵称', '地区', '日期', '评论'])
    # 写入表头
    csv_writer.writeheader()

    # 打开浏览器(实际浏览对象)
    dp = ChromiumPage()
    # 监听数据包
    dp.listen.start('comment/list/')
    # 访问网站
    dp.get('https://www.douyin.com/video/7444572344439541042')

    # 构建循坏翻页,从第1页到第20页(左闭右开区间,所以是1到21)
    for page in range(1, 27):
        print(f'正在采集{page}页的数据内容')

        # 等待数据包加载
        resp = dp.listen.wait()

        # 获取响应数据
        try:
            json_data = resp.response.body
            # 解析数据,获取评论信息所在的列表
            try:
                comments = json_data['comments']
            except KeyError as e:
                print(f"获取评论列表出现异常,异常信息:{e}")
                comments = []
            # 遍历评论列表,提取每条评论具体数据信息
            for index in comments:
                try:
                    create_time = index['create_time']
                    date = str(datetime.fromtimestamp(create_time))
                    # 尝试获取地区信息,先从ip_label获取,若不存在则尝试从client_info中获取省份信息
                    try:
                        region = index['ip_label']
                    except KeyError:
                        ip_client_info = index.get('client_info', {})
                        region = ip_client_info.get('province', '未知') if ip_client_info else '未知'
                except KeyError as e:
                    print(f"处理单个评论数据出现异常,异常信息:{e},当前评论数据:{index}")
                    continue
                dit = {
                    '昵称': index['user']['nickname'],
                    '地区': region,
                    '日期': date,
                    '评论': index['text'],
                }
                try:
                    csv_writer.writerow(dit)
                    print(dit)
                except Exception as e:
                    print(f"写入CSV文件出现异常,异常信息:{e},当前数据:{dit}")

                # 查找下一页元素,判断是否存在
                next_page = dp.ele('css:.Rcc71LyU')
                if next_page:
                    dp.scroll.to_see(next_page)
                else:
                    print("未找到下一页元素,可能已到达最后一页或者页面结构有变化")
        except Exception as e:
            print(f"整体页面数据处理出现异常,异常信息:{e}")
### 评论采集爬虫实战教程 #### 使用 Python 和 open-spider 工具实现评论采集 为了实现评论的采集,可以利用 `open-spider` 开源爬虫工具来简化开发过程。此工具提供了针对平台的数据采集功能,能够有效获取直播间的各种信息。 在开始之前,确保已经安装了必要的库和依赖项: ```bash pip install requests beautifulsoup4 pandas ``` 接着,创建一个新的 Python 文件并导入所需的模块: ```python import requests from bs4 import BeautifulSoup import json import time import pandas as pd ``` 定义一个函数用于发送 HTTP 请求并解析响应内容: ```python def fetch_comments(video_id, max_retries=3): url = f"https://www.douyin.com/video/{video_id}/comment" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', 'Referer': f'https://www.douyin.com/' } retry_count = 0 while retry_count < max_retries: try: response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, "html.parser") script_tag = soup.find('script', type="application/json") data_json = json.loads(script_tag.string.strip()) comments_list = [] for item in data_json['comments']: comment_info = { 'user_name': item['author']['nickname'], 'content': item['text'], 'like_count': item['digg_count'] } comments_list.append(comment_info) return comments_list except Exception as e: print(f"Error fetching comments: {e}") retry_count += 1 if retry_count >= max_retries: raise ValueError("Failed to retrieve comments after multiple attempts.") time.sleep(2 ** retry_count) # Exponential backoff strategy return None ``` 保存所抓取的数据至 CSV 文件中以便后续分析处理: ```python if __name__ == "__main__": video_ids = ["example_video_id"] # Replace with actual video IDs you want to scrape. all_comments = [] for vid in video_ids: try: comments = fetch_comments(vid) all_comments.extend(comments) except Exception as err: print(err) continue df = pd.DataFrame(all_comments) df.to_csv("douyin_comments.csv", index=False, encoding='utf-8-sig') ``` 通过上述代码片段展示了如何构建一个简单的评论采集器[^1]。需要注意的是,在实际应用过程中应当遵循目标网站的服务条款以及法律法规的要求。
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万能小贤哥

感谢大捞

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值