详解使用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编程中的字符串
Oct 14 Python
Linux 下 Python 实现按任意键退出的实现方法
Sep 25 Python
Django如何配置mysql数据库
May 04 Python
python logging模块的使用总结
Jul 09 Python
pycharm配置git(图文教程)
Aug 16 Python
pytorch程序异常后删除占用的显存操作
Jan 13 Python
python集合删除多种方法详解
Feb 10 Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
Jun 02 Python
Python Request类源码实现方法及原理解析
Aug 17 Python
linux mint中搜狗输入法导致pycharm卡死的问题
Oct 28 Python
PyQT5速成教程之Qt Designer介绍与入门
Nov 02 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
从一个不错的留言本弄的mysql数据库操作类
2007/09/02 PHP
php使用exec shell命令注入的方法讲解
2013/11/12 PHP
typecho插件编写教程(二):写一个新插件
2015/05/28 PHP
PHP不使用递归的无限级分类简单实例
2016/11/05 PHP
PHP通过引用传递参数用法分析
2016/12/01 PHP
使用XHProf查找PHP性能瓶颈的实例
2017/12/13 PHP
JS location几个方法小姐
2008/07/09 Javascript
Javascript 读后台cookie代码
2008/09/15 Javascript
兼容IE和FF的js脚本代码小结(比较常用)
2010/12/06 Javascript
js判断生效时间不得大于失效时间的思路及代码
2013/04/23 Javascript
js实现动态改变字体大小代码
2014/01/02 Javascript
from表单多个按钮提交用onclick跳转不同action
2014/04/24 Javascript
js中的getAttribute方法使用示例
2014/08/01 Javascript
基于jquery实现的可编辑下拉框实现代码
2014/08/02 Javascript
jquery制作多功能轮播图插件
2015/04/02 Javascript
理解AngularJs指令
2015/12/10 Javascript
jquery 验证用户名是否重复代码实例
2019/05/14 jQuery
vue动态注册组件实例代码详解
2019/05/30 Javascript
Python中django学习心得
2017/12/06 Python
python学习开发mock接口
2019/04/28 Python
Python数学形态学实例分析
2019/09/06 Python
Python函数式编程实例详解
2020/01/17 Python
Django实现whoosh搜索引擎使用jieba分词
2020/04/08 Python
Python实现Keras搭建神经网络训练分类模型教程
2020/06/12 Python
HTML5中Localstorage的使用教程
2015/07/09 HTML / CSS
瑜伽服装品牌:露露柠檬(lululemon athletica)
2017/06/04 全球购物
瑞士男士时尚网上商店:Babista
2020/05/14 全球购物
编码实现字符串转整型的函数
2012/06/02 面试题
国贸专业毕业求职信
2014/06/11 职场文书
理财计划书
2014/08/14 职场文书
英语教育专业毕业生求职信
2014/08/28 职场文书
遗嘱格式范本
2015/08/07 职场文书
JavaScript函数柯里化
2021/11/07 Javascript
MySQL创建管理KEY分区
2022/04/13 MySQL
浅谈MySql update会锁定哪些范围的数据
2022/06/25 MySQL
mysql查看表结构的三种方法总结
2022/07/07 MySQL