Python 局部变量';链接';分配前参考

Python 局部变量';链接';分配前参考,python,Python,我实现的Scrapy解析方法给了我一个错误: UnboundLocalError:分配前引用的局部变量“links” 作为一个新手,我对自己在这里做错了什么知之甚少。我想为将来添加的新网站留出空间,但如何实现该网站特有的xpath,以便它能够刮去其内部链接 XPath是正确的,在shell中工作 # -*- coding: utf-8 -*- import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spi

我实现的Scrapy解析方法给了我一个错误:

UnboundLocalError:分配前引用的局部变量“links”

作为一个新手,我对自己在这里做错了什么知之甚少。我想为将来添加的新网站留出空间,但如何实现该网站特有的xpath,以便它能够刮去其内部链接

XPath是正确的,在shell中工作

# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from rvcalinkscrapper.items import RvcalinkscrapperItem
from scrapy.loader import ItemLoader
from scrapy.loader.processors import TakeFirst, MapCompose
from w3lib.html import remove_tags

class MultifileoutSpider(scrapy.Spider):
name = 'multifileout'
allowed_domains = []
start_urls = []
read_urls = open('../urls.txt', 'r')
for url in read_urls.readlines():
    url = url.strip() 
    allowed_domains = allowed_domains + [url[4:]]
    start_urls = start_urls + ['http://' + url]
read_urls.close()

def parse(self, response):

    item_loader = ItemLoader(item=RvcalinkscrapperItem(), response=response)
    item_loader.default_input_processor = MapCompose(remove_tags)
    item_loader.default_output_processor = TakeFirst()

    shop = response.xpath("shop")
    if shop == "shop0":
        links = '//li[@class="mobile-nav__item"]/a/@href'
    elif shop == "shop1":
        links = '//ul[@class="level2 unstyled"]/li/a/@href'

    item_loader.add_xpath("links", links)

    item_loader.add_value("shop", shop)

    item_loader.add_value("url", response.url)

    return item_loader.load_item()

如果
shop
不是这两件事之一,则不会分配
链接。你可以这么做

...
links = '//li[@class="mobile-nav__item"]/a/@href'
shop = response.xpath("shop")
if shop == "shop1":
    links = '//ul[@class="level2 unstyled"]/li/a/@href'
...

假设有一个您想要使用的“默认”路径(我使用了
shop0
)。显然,您可以将其打开,或者向其添加一个
elif

如果
shop
既不是
“shop0”
也不是
“shop1”
,则变量
links
不会初始化。在这两种情况下,您要么给它一个默认值,要么不使用它。@DyZ您可能会用一个工作的代码补丁来编写这个答案吗?但请看下面@BruceWayne的答案。同样的错误仍然存在。这就是我所做的
shop=response.xpath(“shop”)如果shop==“shop0”:links='//li[@class=“mobile-nav\uuuu item”]/a/@href'shop=response.xpath(“shop”)如果shop==“shop1”:links='//ul ul[@class=“level2 unstyled”]/li/a/@href”item\u loader.add\uxpath(“links”,links)
@anshumananand-您确信
商店=…
将只返回
shop1
shop0
?不是,比如说
shop3
no1
,等等?当添加新网站时,我肯定需要使用shop3再添加一个xpath,这样它也必须返回shop3。@Anshumanand但目前你确定
链接
将是这两条路径之一吗?如果不是,您希望为
链接返回什么?