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