在 scrapy 中正确处理 cookies 的方式是什么

3 投票
1 回答
1237 浏览
提问于 2025-04-18 04:08

我还是个新手,正在用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

撰写回答