我的工作scrapy框架是我spider.py代码META标记未在scrapy蟒蛇工作
class Example(BaseSpider):
name = "example"
allowed_domains = {"http://www.example.com"}
start_urls = [
"http://www.example.com/servlet/av/search&SiteName=page1"
]
def parse(self, response):
hxs = HtmlXPathSelector(response)
hrefs = hxs.select('//table[@class="knxa"]/tr/td/a/@href').extract()
# href consists of all href tags and i am copying in to forwarding_hrefs by making them as a string
forwarding_hrefs = []
for i in hrefs:
forwarding_hrefs.append(i.encode('utf-8'))
return Request('http://www.example.com/servlet/av/search&SiteName=page2',
meta={'forwarding_hrefs': response.meta['forwarding_hrefs']},
callback=self.parseJob)
def parseJob(self, response):
print response,">>>>>>>>>>>"
结果:
2012-07-18 17:29:15+0530 [example] DEBUG: Crawled (200) <GET http://www.example.com/servlet/av/search&SiteName=page1> (referer: None)
2012-07-18 17:29:15+0530 [MemorialReqionalHospital] ERROR: Spider error processing <GET http://www.example.com/servlet/av/search&SiteName=page2>
Traceback (most recent call last):
File "/usr/lib64/python2.7/site-packages/twisted/internet/base.py", line 1167, in mainLoop
self.runUntilCurrent()
File "/usr/lib64/python2.7/site-packages/twisted/internet/base.py", line 789, in runUntilCurrent
call.func(*call.args, **call.kw)
File "/usr/lib64/python2.7/site-packages/twisted/internet/defer.py", line 361, in callback
self._startRunCallbacks(result)
File "/usr/lib64/python2.7/site-packages/twisted/internet/defer.py", line 455, in _startRunCallbacks
self._runCallbacks()
--- <exception caught here> ---
File "/usr/lib64/python2.7/site-packages/twisted/internet/defer.py", line 542, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "/home/local/user/project/example/example/spiders/example_spider.py", line 36, in parse
meta={'forwarding_hrefs': response.meta['forwarding_hrefs']},
exceptions.KeyError: 'forwarding_hrefs'
什么我想要做的是我收集所有的href标签
http://www.example.com/servlet/av/search&SiteName=page1
,并放置到forward_hrefs
并在接下来的请求调用此forward_hrefs
(想在未来的方法来使用这个forward_urls
列表)
http://www.example.com/servlet/av/search&SiteName=page2
我想也从第2页中添加HREF标记forward_urls和循环在这个forward_hrefs
并产生每个href标签的请求,这是我的想法,但它显示了上面的错误,上面的代码有什么错误,实际上meta标签是为了复制项目。 任何人都可以请让我知道这个如何从parse
方法复制forward_hrefs
列表parseJob
方法。
最后,我的意思是将forward_hrefs
列表从parse
方法复制到parseJob
方法。
希望我事先说明好后悔,如果不是请让我知道....
感谢
yes确定工作,但如何访问parseJob方法中的forward_hrefs列表,因为如果我在parsejob方法中键入“print response.forward_hrefs”,它将显示错误exceptions.AttributeError:'HtmlResponse'对象没有属性'forwarding_hrefs' – 2012-07-18 12:43:44
you access它像你试图在开始时传递它:response.meta ['forwarding_hrefs'] – iblazevic 2012-07-18 12:48:34
哇谢谢你的工作(如果你不介意)我们也可以将项目从解析方法复制到parseJob方法,因为我们不能在单一方法中写入两个返回像返回项目返回请求(url),因为我正在实现页面我想要保存第一页的数据到项目中我想在下一页中使用该项目并为此项目添加第二页数据 – 2012-07-18 13:05:11