详解使用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函数参数类型*、**的区别
Apr 11 Python
彻底搞懂Python字符编码
Jan 23 Python
浅析PHP与Python进行数据交互
May 15 Python
Python JSON格式数据的提取和保存的实现
Mar 22 Python
Python分布式进程中你会遇到的问题解析
May 28 Python
Flask框架模板继承实现方法分析
Jul 31 Python
python正则爬取某段子网站前20页段子(request库)过程解析
Aug 10 Python
使用Puppeteer爬取微信文章的实现
Feb 11 Python
解决django接口无法通过ip进行访问的问题
Mar 27 Python
pytorch随机采样操作SubsetRandomSampler()
Jul 07 Python
Python Map 函数的使用
Aug 28 Python
Python实现加密的RAR文件解压的方法(密码已知)
Sep 11 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性能优化 产生高度优化代码
2011/07/22 PHP
php shell超强免杀、减少体积工具实现代码
2012/10/16 PHP
简单的pgsql pdo php操作类实现代码
2016/08/25 PHP
php实现socket推送技术的示例
2017/12/20 PHP
Extjs 几个方法的讨论
2010/01/28 Javascript
浮动的div自适应居中显示的js代码
2013/12/23 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
2014/06/12 Javascript
javascript实现删除前弹出确认框
2015/06/04 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
2015/07/28 Javascript
JavaScript实现字符串与日期的互相转换及日期的格式化
2016/03/07 Javascript
NodeJS中的MongoDB快速入门详细教程
2016/11/11 NodeJs
node.js(express)中使用Jcrop进行图片剪切上传功能
2017/04/21 Javascript
JQuery 封装 Ajax 常用方法(推荐)
2017/05/21 jQuery
浅谈js基础数据类型和引用类型,深浅拷贝问题,以及内存分配问题
2017/09/02 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
2017/10/25 Javascript
javascript实现简易聊天室
2019/07/12 Javascript
Python 开发Activex组件方法
2009/11/08 Python
Python3.5实现的三级菜单功能示例
2019/03/25 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
2020/01/04 Python
python 插入日期数据到Oracle实例
2020/03/02 Python
python模拟实现分发扑克牌
2020/04/22 Python
Django中使用Json返回数据的实现方法
2020/06/03 Python
CSS3中的5个有趣的新技术
2009/04/02 HTML / CSS
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
如何在Canvas上的图形/图像绑定事件监听的实现
2020/09/16 HTML / CSS
最新教师自我评价分享
2013/11/12 职场文书
高中同学聚会邀请函
2014/01/11 职场文书
高速铁道技术专业求职信
2014/08/09 职场文书
调研汇报材料范文
2014/08/17 职场文书
党员教师四风自我剖析材料
2014/09/30 职场文书
学校党委干部个人对照检查材料思想汇报
2014/10/09 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
论文评审意见
2015/06/05 职场文书
班主任工作经验交流会总结
2015/11/02 职场文书
PHP中国际化的字符串排序和比较对象详解
2021/08/23 PHP