在 scrapy 中正确处理 cookies 的方式是什么
我还是个新手,正在用Scrapy处理一个需要用到cookies的网站。这对我来说有点困难,因为我可以很顺利地从不需要cookies的网站获取数据,但从需要cookies的网站获取数据就比较麻烦了。
我有这样的代码结构:
class mySpider(BaseSpider):
name='data'
allowed_domains =[]
start_urls =["http://...."]
def parse(self, response):
sel = HtmlXPathSelector(response)
items = sel.xpath('//*[@id=..............')
vlrs =[]
for item in items:
myItem['img'] = item.xpath('....').extract()
yield myItem
这样写是没问题的,我可以顺利地从不需要cookies的网站获取数据。我在这个网址上找到了可以处理cookies的方法,但我不太明白该把这段代码放在哪里,才能用xpath获取数据。
我正在测试这段代码:
request_with_cookies = Request(url="http://...",cookies={'country': 'UY'})
但是我不知道该怎么用或者把这段代码放在哪里。我把这段代码放进了parse函数里,想用来获取数据。
def parse(self, response):
request_with_cookies = Request(url="http://.....",cookies={'country':'UY'})
sel = HtmlXPathSelector(request_with_cookies)
print request_with_cookies
我尝试用XPath从这个新的需要cookies的网址获取数据,然后打印出抓取的新数据。我以为这和处理不需要cookies的网址是一样的,但当我运行时出现了错误,因为'Request'对象没有'body_as_unicode'这个属性。我该如何正确处理这些cookies呢?我有点迷茫。非常感谢。
1 个回答
3
你离成功很近了!
parse() 方法的作用是它会“产生”一系列的 Item
(项目)或者 Request
(请求),或者两者的混合。在你的情况下,你只需要做以下操作:
yield request_with_cookies
这样一来,你的 parse() 方法就会再次运行,这次会用那些带有 cookies 的 URL 请求生成的 Response
对象。
http://doc.scrapy.org/en/latest/topics/spiders.html?highlight=parse#scrapy.spider.Spider.parse http://doc.scrapy.org/en/latest/topics/request-response.html