详解使用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 25 Python
对python中执行DOS命令的3种方法总结
May 12 Python
python 寻找list中最大元素对应的索引方法
Jun 28 Python
Django restframework 源码分析之认证详解
Feb 22 Python
pyqt5 获取显示器的分辨率的方法
Jun 18 Python
python global关键字的用法详解
Sep 05 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
Dec 10 Python
python with (as)语句实例详解
Feb 04 Python
Python利用FFT进行简单滤波的实现
Feb 26 Python
python 实现 hive中类似 lateral view explode的功能示例
May 18 Python
Python HTMLTestRunner库安装过程解析
May 25 Python
使用python matploblib库绘制准确率,损失率折线图
Jun 16 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列出一个目录下的所有文件的代码
2012/10/09 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
2015/03/19 PHP
PHP搭建大文件切割分块上传功能示例
2017/01/04 PHP
javascript  Error 对象 错误处理
2008/05/18 Javascript
jQuery 1.8 Release版本发布了
2012/08/14 Javascript
基于jquery的文章中所有图片width大小批量设置方法
2013/08/01 Javascript
javascript中的self和this用法小结
2014/02/08 Javascript
10分钟学会写Jquery插件实例教程
2014/09/06 Javascript
javascript中数组array及string的方法总结
2014/11/28 Javascript
jQuery判断多个input file 都不能为空的例子
2015/06/23 Javascript
javascript实现base64 md5 sha1 密码加密
2015/09/09 Javascript
Bootstrap每天必学之表格
2015/11/23 Javascript
详解JavaScript正则表达式之RegExp对象
2015/12/13 Javascript
angular2倒计时组件使用详解
2017/01/12 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
原生JS京东轮播图代码
2017/03/22 Javascript
基于nodejs+express4.X实现文件下载的实例代码
2017/07/13 NodeJs
简单实现jQuery手风琴效果
2017/08/18 jQuery
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
2020/04/12 Javascript
详解element-ui中表单验证的三种方式
2019/09/18 Javascript
关于在LayUI中使用AJAX提交巨坑记录
2019/10/25 Javascript
JavaScript语句错误throw、try及catch实例解析
2020/08/18 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
Vant 在vue-cli 4.x中按需加载操作
2020/11/05 Javascript
Python 解析XML文件
2009/04/15 Python
python中pip的安装与使用教程
2018/08/10 Python
python绘制热力图heatmap
2020/03/23 Python
Pandas之MultiIndex对象的示例详解
2019/06/25 Python
Python OpenCV图像指定区域裁剪的实现
2019/10/30 Python
详解在python操作数据库中游标的使用方法
2019/11/12 Python
django框架两个使用模板实例
2019/12/11 Python
python反编译教程之2048小游戏实例
2021/03/03 Python
css3 2D图片转动样式可以扩充到Js当中
2014/04/29 HTML / CSS
个人简历自我评价
2014/01/06 职场文书
求职信如何撰写?
2019/05/22 职场文书
iPhone13 Pro外观确定,升级4800万镜头,4月20日发新品
2021/04/15 数码科技