You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Scrapy爬虫重复返回首个Powerball彩票数据条目,无法抓取全部历史开奖数据问题咨询

解决Scrapy爬虫重复输出首个开奖数据的问题

我一眼就看出问题啦——你在循环里提取数据的时候,一直用response.css()来获取元素,这会每次都从整个页面的开头找匹配项,自然每次拿到的都是第一行的数据!

你需要把提取数据的对象换成循环里的results变量(也就是当前遍历到的那一行),这样才能拿到每一行对应的开奖信息。另外,原代码里的日期选择器也需要调整到当前行内,不然可能也会重复拿第一个日期。

修改后的完整代码

import scrapy
class LottoSpider(scrapy.Spider):
    name = 'lottos'
    start_urls = [
        'https://www.lotteryextreme.com/powerball/results'
    ]
    def parse(self, response):
        # 遍历每个开奖结果行
        for results in response.xpath('//*[contains(concat( " ", @class, " " ), concat( " ", "wyn", " " ))]'):
            # 从当前行提取日期
            date = results.css('span.f20::text').get()
            # 从当前行提取所有号码单元格的文本
            number_cells = results.css('.results2 td::text').extract()
            # 按索引映射对应号码字段
            yield {
                'date': date,
                'number1': number_cells[0],
                'number2': number_cells[1],
                'number3': number_cells[2],
                'number4': number_cells[3],
                'number5': number_cells[4],
                'powerball': number_cells[6],
            }

关键调整说明

  • 切换选择器上下文:把所有response.css()替换为results.css(),让选择器只在当前遍历的开奖行内查找元素,而不是全局搜索整个页面
  • 优化号码提取逻辑:先一次性提取当前行的所有号码单元格文本到列表,再按索引取值,代码更简洁易维护
  • 日期与行绑定:日期提取改为从当前行内获取,确保每个开奖日期和对应的号码一一匹配

这样运行爬虫后,就能正确抓取每一行的开奖数据,不会再重复输出第一行内容了!

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

火山引擎 最新活动