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

Scrapy爬虫未遍历条目:重复输出同一新闻内容的问题求助

问题根源与修复方案

嘿,你遇到的问题其实很典型——循环里引用了整个选择器集合,而不是当前循环的单个元素!

先看你代码里的问题点:

for website in link:
    yield {
        'title': link.css('tr.athing td.title a.storylink::text').get(),
        'link': link.css('tr.athing td.title a::attr(href)').get()
    }

这里的link是通过response.css('tr.athing')获取的所有新闻条目集合,每次调用.get()只会返回这个集合里第一个元素的对应值,所以循环30次(每页的条目数),输出的都是第一条新闻的内容。

修复后的代码

把循环里的link换成当前迭代的website就行,而且因为website已经是单个tr.athing元素了,内部选择器可以简化掉重复的tr.athing:

import scrapy
class ArticlesSpider(scrapy.Spider):
    name = 'articles'
    start_urls = [
        'https://news.ycombinator.com',
        'https://news.ycombinator.com/news?p=2'
    ]
    def parse(self, response):
        link = response.css('tr.athing')
        for website in link:
            yield {
                'title': website.css('td.title a.storylink::text').get(),
                'link': website.css('td.title a::attr(href)').get()
            }

额外优化小建议

如果担心少数条目可能缺失标题或链接(虽然Hacker News基本不会出现这种情况),可以用.get(default='')来避免返回None,让结果更规整:

'title': website.css('td.title a.storylink::text').get(default='无标题'),
'link': website.css('td.title a::attr(href)').get(default='无链接')

这样修改后,爬虫就能正确遍历每页的每个新闻条目,提取对应内容啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 16:49:05