• 九、在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,

  • 相关阅读:
    BZOJ 2034 【2009国家集训队】 最大收益
    vijos P1780 【NOIP2012】 开车旅行
    BZOJ 2115 【WC2011】 Xor
    BZOJ 3631 【JLOI2014】 松鼠的新家
    BZOJ 4717 改装
    BZOJ 2957 楼房重建
    BZOJ 4034 【HAOI2015】 T2
    BZOJ 1834 【ZJOI2010】 network 网络扩容
    BZOJ 2440 【中山市选2011】 完全平方数
    BZOJ 2733 【HNOI2012】 永无乡
  • 原文地址:https://www.cnblogs.com/nuochengze/p/12875947.html
Copyright © 2020-2023  润新知