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

如何使用Scrapy爬取带有「加载更多」功能网站的全量帖子数据

Scrapy全量爬取实现方案

原有代码问题

  • next_page提取逻辑错误:response.css('div.autoload_continue').get()获取的是div标签的完整HTML内容,不是分页跳转链接,且该逻辑写在帖子遍历循环内部,会重复发起无效请求
  • 没有匹配站点的分页规则:该站点分页通过URL参数curpg控制,第一页无参数,第二页为?curpg=2,后续页码依次递增,没有直接暴露的静态下一页链接

修改后的可运行代码

import scrapy

class PostsSpider(scrapy.Spider):
    name = "posts"
    # 起始页码
    cur_page = 1
    base_url = 'https://economictimes.indiatimes.com/markets/stocks/recos'

    def start_requests(self):
        yield scrapy.Request(self.base_url, callback=self.parse)

    def parse(self, response):
        # 先提取当前页所有帖子
        post_list = response.css('div.eachStory')
        # 如果当前页没有帖子,说明已经爬完所有页,直接终止
        if not post_list:
            return
        
        for post in post_list:
            yield {
                'title': post.css('a::text').get().strip(),
                'date': post.css('time::text').get().strip()
            }
        
        # 构造下一页请求
        self.cur_page += 1
        next_page_url = f'{self.base_url}?curpg={self.cur_page}'
        yield scrapy.Request(next_page_url, callback=self.parse)

使用说明

  • 执行爬取导出CSV时,可指定编码避免乱码,命令为:scrapy crawl posts -o posts.csv -s FEED_EXPORT_ENCODING=utf-8
  • 可在项目settings.py中配置DOWNLOAD_DELAY = 1,设置1秒下载延迟,避免请求频率过高被站点封禁
  • 若遇到反爬拦截,可在settings.py中修改USER_AGENT为常用浏览器UA,降低被识别概率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:09:03