我试图从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
答案 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