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

运行Scrapy爬虫代码报错TypeError: Selector对象不可迭代问题求助

错误原因与修复方案

核心报错原因

报错TypeError: 'Selector' object is not iterable的直接原因是:
Tabel=response.xpath('//table[contains(@class,"wikitable sortable")]')[0] 执行后,Tabel是单个Selector对象,不支持for循环遍历操作,你对单个非可迭代对象执行遍历逻辑才触发了该错误。

其他附带逻辑问题

除了遍历逻辑错误外,代码还有两处明显问题:

  • allowed_domains配置错误:目标站点域名是wikipedia.org,不是wikipedia.com,配置错误会导致后续请求被Scrapy的离线中间件拦截
  • xpath提取逻辑错误:你需要遍历的是表格下的行数据,而不是表格本身,原xpath路径也没有正确定位到州名对应的节点

修复后的完整代码

from scrapy import Spider

class WikiSpider(Spider):
    name = 'wiki'
    allowed_domains = ['wikipedia.org']
    start_urls = ['https://en.wikipedia.org/wiki/List_of_states_and_territories_of_the_United_States']

    def parse(self, response):
        # 直接定位目标表格下的所有行
        rows = response.xpath('//table[contains(@class,"wikitable sortable")]/tbody/tr')
        for row in rows:
            # 逐行提取州名,增加判空避免索引越界
            state = row.xpath('./th/a/text()').get()
            if state:
                yield {
                    'state': state
                }

代码修改说明

  • 删除了对单个表格Selector的遍历逻辑,改为直接遍历表格下所有行的Selector列表
  • 修正了域名配置,保证爬虫可以正常发起请求
  • 优化了xpath路径,减少不必要的节点嵌套查询
  • 使用get()方法替代extract(),配合判空逻辑避免索引越界异常
  • 给yield的字典增加了key,符合Scrapy item的标准输出格式

内容的提问来源于stack exchange,提问作者Abu Bakar Siddique

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:45:02