废弃多个帐户,即多个登录

Lha*_*zzi 4 python web-crawler scrapy web-scraping scrapy-spider

我已成功废弃单个帐户的数据.我想在一个网站上废弃多个帐户,多个帐户需要多次登录,我想要一种如何管理登录/注销的方法?

dan*_*gra 7

你可以在每个帐户会话中使用多个cookiejars并行刮取多个帐户,请参阅http://doc.scrapy.org/en/latest/topics/downloader-middleware.html?highlight=cookiejar#std上的 "cookiejar"请求元键: reqmeta-cookiejar

澄清一下:假设我们有一系列帐户settings.py:

MY_ACCOUNTS = [
    {'login': 'my_login_1', 'pwd': 'my_pwd_1'},
    {'login': 'my_login_2', 'pwd': 'my_pwd_2'},
]
Run Code Online (Sandbox Code Playgroud)

这是登录页面的链接: http://example.com/login

start_requests在你的蜘蛛中创建函数,在这个函数中我们可以在MY_ACCOUNTS数组上循环并登录到每个帐户:

def start_requests(self):
    requests = []

    for i, account in enumerate(self.crawler.settings['MY_ACCOUNTS']):
        request = FormRequest('http://example.com/login', 
            formdata={'form_login_name': account['login'], 'form_pwd_name': account['pwd']}, 
            callback=self.parse,
            dont_filter=True)

        request.meta['cookiejar'] = i
        requests.append(request)

    return requests
Run Code Online (Sandbox Code Playgroud)

form_login_name并且form_pwd_name分别是登录表单上的字段名称.

dont_filter=True 为了忽略重复请求的过滤器,因为在这里我们发出POST请求以在同一页面上登录 http://example.com/login

request.meta['cookiejar'] = i要分隔每个会话的cookie(登录),不要忘记cookiejar在子请求中添加标识符,假设您想在登录后将scrapy重定向到页面:

def parse(self, response): 
    """ make some manipulation here ... """

    yield Request(my_url, meta={'cookiejar': response.meta['cookiejar']}, callback = my_callback) 
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法限制每个cookiejar的并发连接数?类似于设置CONCURRENT_REQUESTS_PER_DOMAIN但是每个会话上下文? (3认同)