详解使用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 30 Python
Python输出9*9乘法表的方法
May 25 Python
python字符类型的一些方法小结
May 16 Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
Nov 16 Python
mac下如何将python2.7改为python3
Jul 13 Python
Python使用分布式锁的代码演示示例
Jul 30 Python
pytorch 实现打印模型的参数值
Dec 30 Python
Pytorch实现神经网络的分类方式
Jan 08 Python
从训练好的tensorflow模型中打印训练变量实例
Jan 20 Python
Tensorflow训练MNIST手写数字识别模型
Feb 13 Python
解决在keras中使用model.save()函数保存模型失败的问题
May 21 Python
Python实现寻找回文数字过程解析
Jun 09 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
咖啡的传说和历史
2021/03/03 新手入门
php 删除无限级目录与文件代码共享
2008/11/22 PHP
php下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
php中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
PHP中读取照片exif信息的方法
2014/08/20 PHP
PHP中通过trigger_error触发PHP错误示例
2015/06/23 PHP
浅谈PHP的反射机制
2016/12/15 PHP
js 判断 enter 事件
2009/02/12 Javascript
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
前后台交互过程中json格式如何解析以及如何生成
2012/12/26 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
2013/08/01 Javascript
浅谈javascript六种数据类型以及特殊注意点
2013/12/20 Javascript
javascript数组遍历for与for in区别详解
2014/12/04 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
2016/05/30 Javascript
bootstrap table 表格中增加下拉菜单末行出现滚动条的快速解决方法
2017/01/05 Javascript
C#微信小程序服务端获取用户解密信息实例代码
2017/03/10 Javascript
React学习之事件绑定的几种方法对比
2017/09/24 Javascript
javascript 开发之网页兼容各种浏览器
2017/09/28 Javascript
微信小程序用户授权弹窗 拒绝时引导用户重新授权实现
2019/07/29 Javascript
一看就会的vuex实现登录验证(附案例)
2020/01/09 Javascript
简单的Python2.7编程初学经验总结
2015/04/01 Python
Python中__init__.py文件的作用详解
2016/09/18 Python
python统计多维数组的行数和列数实例
2018/06/23 Python
pycharm 配置远程解释器的方法
2018/10/28 Python
python创建学生管理系统
2019/11/22 Python
python路径的写法及目录的获取方式
2019/12/26 Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
2020/10/18 Python
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
thinkphp5 redis缓存新增方法实例讲解
2021/03/24 PHP
《领导干部从政道德启示录》学习心得体会
2016/01/20 职场文书
2016年全国爱牙日宣传活动总结
2016/04/05 职场文书
php引用传递
2021/04/01 PHP
Python Pandas常用函数方法总结
2021/06/15 Python
JavaScript利用html5新方法操作元素类名详解
2021/11/27 Javascript
pytorch中的torch.nn.Conv2d()函数图文详解
2022/02/28 Python
MySQL示例讲解数据库约束以及表的设计
2022/06/16 MySQL