You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Scrapy抓取用户评论:目标站点评论数据来源排查

解决Scrapy抓取动态加载评论的问题

嘿,我来帮你搞定这个难题!你遇到的是动态加载内容的典型情况——用户评论并没有直接嵌入在页面的HTML里,而是通过AJAX异步请求从后端接口拉取的。你之前查看的comments-plugin-cms.js只是负责渲染评论的前端脚本,不是数据来源,咱们换个思路找:

第一步:定位评论的后端接口

  1. 打开Chrome DevTools的「Network」标签,先清空当前的请求记录
  2. 刷新页面或者滚动加载更多评论,触发评论数据的加载
  3. 在Network的筛选栏选择「XHR/Fetch」类型,这是AJAX请求的核心分类
  4. 逐个查看返回的请求,重点关注那些返回JSON格式数据的接口——评论内容大概率藏在这里

第二步:分析目标接口的结构

找到包含评论的接口后,你需要确认这些信息:

  • 请求的URL和方法(一般是GET请求)
  • 必要的请求参数(比如文章IDarticle_id、页码page、每页数量limit等)
  • 返回JSON里的评论字段(比如content、user_name这类字段,不同站点命名可能不同)

举个例子,假设你找到的接口是https://example.com/api/get_comments?article_id=12345&page=1,点击「Response」标签就能看到类似这样的JSON结构:

{
  "code": 200,
  "data": {
    "comments": [
      {
        "id": 1,
        "content": "这是一条评论内容",
        "user_name": "张三"
      },
      {
        "id": 2,
        "content": "这是另一条评论",
        "user_name": "李四"
      }
    ],
    "next_page": 2
  }
}

第三步:用Scrapy直接请求接口抓取数据

确定接口后,你不需要再爬取原页面,直接向这个接口发送请求即可。以下是一个简单的爬虫示例:

import scrapy
import json

class CommentSpider(scrapy.Spider):
    name = 'guancha_comment_spider'
    # 替换成你找到的评论接口URL,注意带上必要参数
    start_urls = ['https://example.com/api/get_comments?article_id=12345&page=1']

    def parse(self, response):
        # 解析返回的JSON数据
        response_data = json.loads(response.text)
        comments = response_data['data']['comments']
        
        # 提取每条评论的内容
        for comment in comments:
            yield {
                'comment_content': comment['content'],
                'username': comment['user_name']
                # 可以添加更多你需要的字段
            }
        
        # 处理分页:如果有下一页,继续请求
        next_page_num = response_data['data'].get('next_page')
        if next_page_num:
            next_url = f'https://example.com/api/get_comments?article_id=12345&page={next_page_num}'
            yield scrapy.Request(url=next_url, callback=self.parse)

第四步:处理可能的反爬限制

有些站点会对接口请求做验证,你可能需要:

  • 在请求头里添加User-Agent、Referer等字段,模拟浏览器请求
  • 如果评论需要登录才能查看,你需要在Scrapy中处理Cookie(可以通过scrapy.SessionMiddleware或者手动携带登录后的Cookie)

示例中添加请求头的写法:

yield scrapy.Request(
    url=next_url,
    callback=self.parse,
    headers={
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
        'Referer': '原页面的完整URL'
    }
)

如果接口有加密参数(比如签名),那你可能需要回到comments-plugin-cms.js里分析参数的生成逻辑,但大部分普通站点的评论接口都是无加密的JSON接口,先从这部分入手就好。

内容的提问来源于stack exchange,提问作者Nick Olczak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 12:52:44