详解使用scrapy进行模拟登陆三种方式


Posted in Python onFebruary 21, 2021

scrapy有三种方法模拟登陆方式:
- 直接携带cookies
- 找url地址,发送post请求存储cookie
- 找到对应的form表单,自动解析input标签,自动解析post请求的url地址,自动带上数据,自动发送请求

1、携带cookies登陆github

import scrapy
import re
 
class Login1Spider(scrapy.Spider):
  name = 'login1'
  allowed_domains = ['github.com']
  start_urls = ['https://github.com/NoobPythoner'] # 这是一个需要登陆以后才能访问的页面
 
  def start_requests(self): # 重构start_requests方法
    # 这个cookies_str是抓包获取的
    cookies_str = '...' # 抓包获取
    # 将cookies_str转换为cookies_dict
    cookies_dict = {i.split('=')[0]:i.split('=')[1] for i in cookies_str.split('; ')}
    yield scrapy.Request(
      self.start_urls[0],
      callback=self.parse,
      cookies=cookies_dict
    )
 
  def parse(self, response): # 通过正则表达式匹配用户名来验证是否登陆成功
    result_list = re.findall(r'noobpythoner|NoobPythoner', response.body.decode())
    print(result_list)
    pass

注意:

scrapy中cookie不能够放在headers中,在构造请求的时候有专门的cookies参数,能够接受字典形式的coookie
在setting中设置ROBOTS协议、USER_AGENT

2、使用scrapy.FormRequest()登录

通过scrapy.FormRequest能够发送post请求,同时需要添加fromdata参数作为请求体,以及callback

yield scrapy.FormRequest(
       "https://github.com/session",
       formdata={
         "authenticity_token":authenticity_token,
         "utf8":utf8,
         "commit":commit,
         "login":"****",
         "password":"****"
       },
       callback=self.parse_login
     )

3、使用scrapy.Formrequest.from_response登陆github

import scrapy
import re
 
class Login3Spider(scrapy.Spider):
  name = 'login3'
  allowed_domains = ['github.com']
  start_urls = ['https://github.com/login']
 
  def parse(self, response):
    yield scrapy.FormRequest.from_response(
      response, # 传入response对象,自动解析
      # 可以通过xpath来定位form表单,当前页只有一个form表单时,将会自动定位
      formxpath='//*[@id="login"]/form', 
      formdata={'login': '****', 'password': '***'},
      callback=self.parse_login
    )
 
  def parse_login(self,response):
    ret = re.findall(r"noobpythoner|NoobPythoner", response.text)
    print(ret)

到此这篇关于详解使用scrapy进行模拟登陆三种方式的文章就介绍到这了,更多相关scrapy模拟登陆内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python+matplotlib实现华丽的文本框演示代码
Jan 22 Python
详解python实现线程安全的单例模式
Mar 05 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
Oct 21 Python
用python代码将tiff图片存储到jpg的方法
Dec 04 Python
浅析python参数的知识点
Dec 10 Python
安装python及pycharm的教程图解
Oct 10 Python
python实现用户名密码校验
Mar 18 Python
在django admin中配置搜索域是一个外键时的处理方法
May 20 Python
python 5个实用的技巧
Sep 27 Python
Python 如何实现数据库表结构同步
Sep 29 Python
python 批量下载bilibili视频的gui程序
Nov 20 Python
利用Python如何画一颗心、小人发射爱心
Feb 21 #Python
python 第三方库paramiko的常用方式
Feb 20 #Python
Python中Qslider控件实操详解
Feb 20 #Python
python基于selenium爬取斗鱼弹幕
Feb 20 #Python
Python爬虫+Tkinter制作一个翻译软件的示例
Feb 20 #Python
python爬虫用request库处理cookie的实例讲解
Feb 20 #Python
python 多线程爬取壁纸网站的示例
Feb 20 #Python
You might like
php&java(三)
2006/10/09 PHP
用PHP+java实现自动新闻滚动窗口
2006/10/09 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
2015/06/24 PHP
thinkPHP查询方式小结
2016/01/09 PHP
ThinkPHP中where()使用方法详解
2016/04/19 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
JS.GetAllChild(element,deep,condition)使用介绍
2013/09/21 Javascript
jQuery对象初始化的传参方式
2015/02/26 Javascript
javascript中replace( )方法的使用
2015/04/24 Javascript
JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
2015/10/10 Javascript
JavaScript提升性能的常用技巧总结【经典】
2016/06/20 Javascript
浅谈$('div a') 与$('div>a')的区别
2016/07/18 Javascript
JavaScipt选取文档元素的方法(推荐)
2016/08/05 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
Node.js readline 逐行读取、写入文件内容的示例
2018/03/01 Javascript
vue弹窗组件使用方法
2018/04/28 Javascript
详解Nodejs mongoose
2018/06/10 NodeJs
ajax与jsonp的区别及用法
2018/10/16 Javascript
原生JavaScript实现进度条
2021/02/19 Javascript
[00:58]PWL开团时刻DAY5——十人开雾0换5
2020/11/04 DOTA
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
2016/06/07 Python
完美解决Python2操作中文名文件乱码的问题
2017/01/04 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
Linux下python制作名片示例
2018/07/20 Python
详解python持久化文件读写
2019/04/06 Python
Django ORM实现按天获取数据去重求和例子
2020/05/18 Python
Pytorch实现将模型的所有参数的梯度清0
2020/06/24 Python
详解pycharm2020.1.1专业版安装指南(推荐)
2020/08/07 Python
Python正则re模块使用步骤及原理解析
2020/08/18 Python
HTML5 Canvas画线技巧——实现绘制一个像素宽的细线
2013/08/02 HTML / CSS
澳大利亚最大的在线美发和美容零售商之一:My Hair Care & Beauty
2019/08/24 全球购物
平面设计师岗位职责
2014/09/18 职场文书
党员干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
三方股东合作协议书
2014/10/28 职场文书
培训心得体会怎么写
2016/01/25 职场文书
HTML页面滚动时部分内容位置固定不滚动的实现
2021/04/14 HTML / CSS