Scrapy通过表单身份验证绕过警报消息

时间:2017-11-09 03:36:02

标签: python web-scraping scrapy web-crawler

Scrapy是否可以抓取警报消息?

链接例如 http://domainhere/admin ,一旦在实际浏览器中加载,就会出现带有表单的警告消息以填充用户名和密码。

或者有没有办法在警报消息中检查表单以了解要填充的参数?

PS:我确实拥有此网站的凭据,我只想通过网络抓取自动化流程。

感谢。

1 个答案:

答案 0 :(得分:1)

我通过以下方式做到了这一点:

  1. 观察了继续使用页面所需的身份验证数据后的内容。
  2. 使用“网络”标签中的Chrome开发人员工具,检查了“请求标头”。经过观察,需要授权。
  3. 为了验证步骤#2,我使用了Postman。使用Postman中的授权,基本身份验证类型,填写用户名和密码将为Authorization标头生成相同的值。发送POST请求后,它加载了所需的页面并绕过了身份验证。
  4. 请求标题下的授权值相同,请将值存储在Scraper类中。
  5. 使用带参数的scrapy.Request函数。
  6. 代码:

    import scrapy
    
    class TestScraper(scrapy.Spider):
        handle_httpstatus_list = [401]
        name = "Test"
        allowed_domains = ["xxx.xx.xx"]
        start_urls = ["http://testdomain/test"]
    
        auth = "Basic [Key Here]"
    
        def parse(self, response):
            return scrapy.Request(
                "http://testdomain/test",
                headers={'Authorization': self.auth},
                callback=self.after_login
            )
    
        def after_login(self, response):
            self.log(response.body)
    

    现在,您可以在身份验证过程之后抓取该页面。