使用Scrapy抓取印度中央银行网站时XPath查询返回None如何解决
问题解决方案
首先明确:span标签没有唯一id不是XPath返回None的原因,问题根源是你使用的XPath来自浏览器开发者工具的自动生成结果,浏览器会为原始HTML自动补全tbody标签,但Scrapy请求拿到的页面源代码中不存在tbody节点,导致路径匹配失败。
修正步骤
- 删除XPath路径中的
tbody节点即可修复匹配问题 - 建议优化XPath写法,避免使用多层级索引,适配性更强,不需要提前预判每页的行数
修正后代码示例
start_urls = [ "https://www.centralbankofindia.co.in/en/branch-locator?field_state_target_id=All&combine=&page={}".format( i ) for i in range(0, 5) ] brand_name = "Central Bank of India" spider_type = "chain" def parse(self, response, **kwargs): """Parse response.""" # 直接定位所有表格行,遍历取值 branch_rows = response.xpath('//*[@id="block-cbi-content"]/div/div/div/div[3]/div/table/tr') for row in branch_rows: address = row.xpath('./td[2]/div/span[2]/text()').extract_first() if address: address = address.strip() print(address) def get_text(self, response, path): sol = response.xpath(path).extract_first() return sol
你可以自行打印response.text搜索tbody关键词,验证原始响应中确实不存在该节点,确认修正逻辑的正确性。
内容的提问来源于stack exchange,提问作者AAYUSH JAIN
相关产品推荐
相关产品推荐

