Python 如何对具有不同请求参数值的页面并行执行多个请求?

Python 如何对具有不同请求参数值的页面并行执行多个请求?,python,cookies,scrapy,scrapy-spider,scrapyd,Python,Cookies,Scrapy,Scrapy Spider,Scrapyd,我必须在一个我必须发布参数的站点中废弃一个页面,但是我有一个值数组来请求相同的页面。我不想按顺序为数组的每个值废弃页面。我想取消它并行(这意味着搜索“google.com/query=a”和搜索“google.com/query=b”),我想并行运行这两个请求(目前我无法运行,因为网站登录限制如下)。 问题是该站点一次只允许每个帐户登录会话,这意味着如果该帐户通过浏览器登录,那么如果我们尝试使用任何其他浏览器(匿名模式)再次登录,则登录会话将注销 现在,我想有两种可能,首先,我应该能够在登录后将

我必须在一个我必须发布参数的站点中废弃一个页面,但是我有一个值数组来请求相同的页面。我不想按顺序为数组的每个值废弃页面。我想取消它并行(这意味着搜索“google.com/query=a”和搜索“google.com/query=b”),我想并行运行这两个请求(目前我无法运行,因为网站登录限制如下)。 问题是该站点一次只允许每个帐户登录会话,这意味着如果该帐户通过浏览器登录,那么如果我们尝试使用任何其他浏览器(匿名模式)再次登录,则登录会话将注销

现在,我想有两种可能,首先,我应该能够在登录后将cookie值保存在一个文件中,这样当同一个爬行器使用不同的参数运行时,我可以使用相同的cookie。但是我尝试设置cookie,但cookie未正确设置为请求。因此请求失败。(如果我可以保存cookie并手动设置请求,那么我想使用具有不同参数值的scrapyd运行爬行器)

第二个:当我请求该页面时,我必须通过多处理并行处理或使用python默认库并行处理该页面

但是,正如我看到的一些帖子所说,在他们建议的刮削过程中,多重处理是不好的


是否有人对此有任何想法,或者可以保存一个cookie以用于下一个spider实例?我可以更新所有尝试过的代码,但它将非常庞大,因此等待他人的帮助,我可以根据我尝试过的内容进行更新。

默认情况下,Scrapy会并发执行请求。默认情况下,有8个并发请求,您可以使用inc通过操纵每个域的并发请求,将此值重新设置到更高的级别

cookie由默认cookie中间件管理,很少需要在爬网之间存储cookie。每次爬网都只需登录即可。您可以在spider启动时登录,并使用一个spider会话并发处理所有请求

class SomeSpider(Spider)
    def start_requests(self):
        yield FormRequest("http://login.here.com", formdata={"user": "foo", "password": "bar"}, callback=self.logged_in)

    def logged_in(self, response):
        # check if login went fine
        # make all requests you need
        for url in self.list_of_urls_to_start_with:
            yield Request(url, callback=self.process_data)

   def process_data(self, response):
       # extract things, yield items
       pass

默认情况下,当前不支持在不同爬网之间持久化Cookie。如果您希望在不同的爬行器运行之间存储Cookie,则必须添加方法来序列化
cookielib.Cookie
cookielib.CookieJar
对象,例如json或pickle或其他对象,将它们存储在某处并加载到into spider(可能是一些小型数据库,最好是一些键值存储,redis?anydbm?)。这可以在cookie中间件中完成,加载cookie可以在打开的
spider\u
上完成,并将其保存在关闭的
spider\u
上。如果您确实需要此功能,您可以将default子类化并添加所需的功能。

我在使用yield时遇到此错误。筛选的重复请求:-将不再显示重复(请参阅DUPEFILTER\u DEBUG以显示所有重复项)如果发出重复的请求,则会对其进行筛选。为什么要向同一url发出两次请求?如果有充分的理由,请使用请求()的dont\u filter=True参数禁用重复的筛选器我需要请求发布具有不同参数的同一url。例如,querystring参数不会通过重复筛选器进行筛选,并且两个参数都不会被筛选。默认情况下,具有不同正文的发布请求也不会被筛选。好的,现在我没有遇到任何问题,但我的请求不会同时执行。我如何才能将请求与当前