zoukankan      html  css  js  c++  java
  • 九、在Scrapy中模拟登陆

    使用FormRequest.from_response()方法模拟用户登录

    官方参考文档:https://docs.pythontab.com/scrapy/scrapy0.24/topics/request-response.html#topics-request-response-ref-request-userlogin

    1、说明

      通过网站会实现对某些表单字段(如数据或是登录界面中的认证令牌等)的预填充。

      使用Scrapy抓取网页时,如果想要预填充或重写像用户名、用户密码这些表单字段,可以使用`FormRequest.from_response()`方法实现

      类原型:from_response(

            response,  #一个包含HTML表单的响应页面

            formname(string)=None,  # 如果不为None,表单中的name属性将会被设定为这个值

            formnumber(int)=0,  # 当响应页面中包含多个HTML表单时,本参数用来指定使用第几个表单,第一个表单数字为0

            formdata(dict)=None,  #本参数用来填充表单中属性的值,如果其中一个属性的值在响应页中已被预填充,formadta中的值会将预填充的值覆盖掉

            formxpath(string)=None,  # 如果页面中有多个HTML表单,可以用xpath表达式定位页面中的表单,第一个被匹配的将会被操作

            callback(callable),  请求成功后,调用的方法

          )

    2、参考代码

    import scrapy
    
    class LoginSpider(scrapy.Spider):
        name = "example.com"
        start_urls = ['http://www.example.com/users/login.html']
    
        def parse(self,response):
            return scrapy.FormRequest.from_response(
                response,
                formdata={"username":"dada","password":"secret"},
                callback=self.after_login,
            )
        
        def after_login(self,response):
            # 在执行下一步之前检查是否登录成功
            if "authentication failed" in response.body:
                self.log("Login failed",level=log.ERROR)
                return

    3、通过重写start_requests,

  • 相关阅读:
    第三周学习笔记
    质量属性
    第四周学习
    逻辑回归
    架构的概念
    第二周总结
    线性回归
    十步走-阅读笔记六
    十步走-阅读笔记五
    P2633 Count on a tree
  • 原文地址:https://www.cnblogs.com/nuochengze/p/12875947.html
Copyright © 2011-2022 走看看