You need to enable JavaScript to run this app. Scrapy中能否在XPath的tr[i]表达式中使用while循环变量i?
优惠活动
大模型
产品
解决方案
定价
更多

Scrapy中能否在XPath的tr[i]表达式中使用while循环变量i?

问题解答

该需求完全可以实现,你现有代码无法运行是存在3处明确错误,修正后即可正常执行。

核心错误说明

  • parse方法缩进错误,没有放在AssetSpider类内部,Scrapy无法识别该回调函数
  • XPath表达式中['i']直接写死了字符串i,没有注入循环的变量值,导致所有查询都定位到错误节点
  • response.xpath()返回的是Selector对象,没有调用.get()方法提取实际值,存入结果的不是你需要的文本/链接内容

修正后代码

import scrapy
import logging

class AssetSpider(scrapy.Spider):
    name = 'asset'
    start_urls = ['http://mnregaweb4.nic.in/netnrega/asset_report_dtl.aspx?lflag=eng&state_name=WEST%20BENGAL&state_code=32&district_name=NADIA&district_code=3201&block_name=KRISHNAGAR-I&block_code=&panchayat_name=DOGACHI&panchayat_code=3201009009&fin_year=2020-2021&source=national&Digest=8+kWKUdwzDQA1IJ5qhD8Fw']
    
    def parse(self, response):
        # 用for循环更简洁,也可以保留你原来的while写法
        for i in range(4, 2236):
            assetid = response.xpath(f"//table[2]//tr[{i}]/td[2]/text()").get()
            assetcategory = response.xpath(f"//table[2]//tr[{i}]/td[3]/text()").get()
            schemecode = response.xpath(f"//table[2]//tr[{i}]/td[5]/text()").get()
            link = response.xpath(f"//table[2]//tr[{i}]/td[6]/a/@href").get()
            schemename = response.xpath(f"//table[2]//tr[{i}]/td[7]/text()").get()
            yield {
                'assetid' : assetid,
                'assetcategory' : assetcategory,
                'schemecode' : schemecode,
                'link' : link,
                'schemename' : schemename
            }

优化建议

如果追求更高执行效率,可以先一次性提取所有目标tr节点再遍历,避免每次循环都全局查询DOM:

def parse(self, response):
    # 切片[3:]对应从第4个tr开始取,取到第2235个就停止
    tr_nodes = response.xpath("//table[2]//tr")[3:2235]
    for tr in tr_nodes:
        assetid = tr.xpath("./td[2]/text()").get()
        assetcategory = tr.xpath("./td[3]/text()").get()
        schemecode = tr.xpath("./td[5]/text()").get()
        link = tr.xpath("./td[6]/a/@href").get()
        schemename = tr.xpath("./td[7]/text()").get()
        yield {
            'assetid' : assetid,
            'assetcategory' : assetcategory,
            'schemecode' : schemecode,
            'link' : link,
            'schemename' : schemename
        }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 12:45:03