官方手册里这样写的
def on_start(self):
self.crawl('http://www.example.org/', callback=self.callback,
save={'a': 123})
def callback(self, response):
return response.save['a']
我是这样写的。
@every(minutes=24 * 60)
def on_start(self):
self.crawl('http://baidu.com', callback=self.index_page,
save={'a': 123 })
@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
print response.save['a']
for each in response.doc('a[href^="http"]').items():
self.crawl(each.attr.href, callback=self.detail_page)
报错
[E 150623 17:50:22 basehandler:193] 'NoneType' object has no attribute 'getitem'
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/pyspider/libs/base_handler.py", line 186, in run_task
result = self._run_task(task, response)
File "/usr/local/lib/python2.7/dist-packages/pyspider/libs/base_handler.py", line 166, in _run_task
return self._run_func(function, response, task)
File "/usr/local/lib/python2.7/dist-packages/pyspider/libs/base_handler.py", line 148, in _run_func
return function(*arguments[:len(args) - 1])
File "<taobao>", line 20, in index_page
TypeError: 'NoneType' object has no attribute 'getitem_'
这是为何 是我做错了什么?
1
binux 2015-06-23 19:16:58 +08:00
无法复现
|
2
orzfly 2015-06-23 19:43:46 +08:00
实际跑 index_page 的时候,你用的数据可能是之前没加上 save 字段时 crawl 存进数据库的任务吧?每一个 crawl 都是存进数据库的,然后他的 callback 是稍后从数据库里读出来运行的。如果你存进数据库的时候 save 字段并没有值,那你后面运行到那条任务的时候自然是会出错的。
也许你需要清空一下任务数据库再来…… |