Scrapy - NameError:全局名称' base_search_url'没有定义

时间:2016-09-14 02:02:32

标签: python python-2.7 scrapy scrapy-spider local-variables

我试图从Scrapy蜘蛛类中调用一个局部变量,但后来我得到了NameError: global name 'base_search_url' is not defined

class MySpider(scrapy.Spider):
    name = "mine"
    allowed_domains = ["www.example.com"]

    base_url = "https://www.example.com"

    start_date = "2011-01-01"

    today = datetime.date.today().strftime("%Y-%m-%d")

    base_search_url = 'https://www.example.com/?city={}&startDate={}&endDate={}&page=1',

    city_codes = ['on', 'bc', 'ab']

    start_urls = (base_search_url.format(city_code, start_date, today) for city_code in city_codes)

我尝试使用self.base_search_url,但没有用。有谁知道如何解决它?

仅供参考,我使用Python 2.7

3 个答案:

答案 0 :(得分:0)

解决!我最终使用__init__()函数来解决它。

def __init__(self):
    self.start_urls = (self.base_search_url.format(city_code, self.start_date, self.today) for city_code in self.city_codes)

答案 1 :(得分:0)

来自docs

  

start_urls:Spider将开始抓取的网址列表。   下载的第一页将是此处列出的页面。随后   URL将从开头包含的数据连续生成   网址。

启动网址是列表

通过 init 方法设置来解决它:

def __init__(self):
    self.start_urls=[]
    self.start_urls.append( (base_search_url.format(city_code, start_date,     today) for city_code in city_codes) )

或者在课堂声明中(如您在问题中所示):

start_urls=[]
start_urls.append( (base_search_url.format(city_code, start_date,     today) for city_code in city_codes) )

注意

确保添加以http://https://开头的正确网址。

答案 2 :(得分:0)

Python中只有四个范围:import matplotlib.pyplot as plot from matplotlib import animation ...code defining animate, etc. ... fig = plt.figure() anim = animation.FuncAnimation(fig, animate, interval=sleepTime) ... stuff to add a title, labels to plot ... anim.save('animationframe.png') plt.show() ,因为LEGB定义的局部范围和class的局部范围不是嵌套函数,因此它们不会形成因此,它们是两个单独的本地范围,无法彼此访问。

3个解决方案:

list derivation