使用带有Scrapy的start_request,使用cookie在网站上工作的正确方法是什么?

时间:2014-04-28 17:38:05

标签: python cookies web-scraping scrapy screen-scraping

我在使用Cookie抓取网站时遇到问题,我使用Scrapy但我无法获得正确的数据

我需要指定一个网站的cookie,因为当我从浏览器登录时要求我选择一个城市,以显示相关信息
我试图用一些可能的解决方案失败

class DmozSpider(Spider):
    name = "dmoz"
    allowed_domains = ["dmoz.org"]
    start_urls = [
        "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/"
    ]

def parse(self, response):
    request_with_cookies = Request(url="http://www.example.com",
           cookies={'currency': 'USD', 'country': 'UY'},callback=self.parse_page2)

def parse_page2(self, response):
    sel = Selector(response)
    print sel

我不知道在哪里找到这些函数,例如,因为我可以使用函数start_request,

class MySpider(BaseSpider):
    name = "spider"
    allowed_domains = ""

def start_requests(self):
    return [Request(url="http://www.example.com",
       cookies={'currency': 'USD', 'country': 'UY'})]

我这样做,但我不确定我是否以正确的方式这样做 我该如何正确处理start_requests函数? 我该如何正确处理request_with_cookies函数? 这是为网址指定一些cookie的正确方法吗? 我应该把这个

name = "dmoz"
allowed_domains = ["dmoz.org"]
start_urls = ["http://www.dmoz.org/Computers/Programming/Languages/Python/Books/"]
当我使用start_requests或requests_with_cookies时,在类中

1 个答案:

答案 0 :(得分:2)

尝试在请求中设置headers参数(Cookie也是标题),如下所示:

Request(..., headers = {'Cookie': 'currency=USD&country=UY'}, ...)

您还可以尝试激活dont_merge_cookies的{​​{1}}参数中的meta选项:

Request

这告诉抓取工具忽略网站设置的其他Cookie并仅使用这些Cookie - 如果这些可以被"合并"覆盖。

我认为这取决于网站的哪些行为会起作用,所以请依次尝试,看看他们是否解决了问题。