确保Scrapy在扩展爬网期间保持登录状态

时间:2019-11-13 21:44:58

标签: python python-3.x scrapy

我的Spider需要继续登录网站以进行长时间爬网:

 start_urls = ['https://example.com/login']
 crawl_urls = ["www.example.com/page1",
               "www.example.com/page2",
               "www.example.com/page1000"]


 def parse(self, response):
        token = response.xpath('//*[@name="csrf_token"]/@value').extract_first()
        return [scrapy.FormRequest.from_response(response,
                                                 formdata={'csrf_token': token,
                                                           'password': 'mypassword',
                                                           'username': 'myusername'},
                                                 formcss='.login_form_widget .form',
                                                 callback=self.check_login_response)]

    def check_login_response(self, response):
        if b"Incorrect username or password" in response.body:
            self.log("Login failed", level=logging.ERROR)
            return
        else:
            self.log("Successfully logged in!!")
            for url in self.crawl_urls:
                yield scrapy.Request(url=url, callback=self.scrape)

    def scrape(self, response):
        # scraping
        yield item

问题是页面上的某些数据仅在登录时可见。因此,我的Spider可以在登录时抓取这些数据。但是有些记录缺少这些数据,我发现Scrapy会对这些页面进行了爬网未登录时。

我正在考虑检查响应页面的HTML是否包含我的username,然后登录。

在我的代码中,我应该让Scrapy自己检查一下是否已登录,如果没有,请执行登录?

0 个答案:

没有答案