【发布时间】:2018-02-22 05:10:43
【问题描述】:
我实现的 Scrapy 解析方法给了我错误:
UnboundLocalError: 赋值前引用了局部变量“链接”
对scrapy来说还很陌生,我对我在这里做错了什么知之甚少。我想为将来添加的新网站留出空间,但是如何实现该网站特有的 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既不是"shop0"也不是"shop1",则变量links未初始化。无论哪种情况,您都应该给它一个默认值或不使用它。 -
@DyZ 你能用一个有效的代码补丁来回答吗?
-
但是看看下面@BruceWayne 的回答。
标签: python