详解使用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使用urllib2提交http post请求的方法
May 26 Python
Python网络编程中urllib2模块的用法总结
Jul 12 Python
Python利用matplotlib生成图片背景及图例透明的效果
Apr 27 Python
使用Eclipse如何开发python脚本
Apr 11 Python
python使用matplotlib画饼状图
Sep 25 Python
Opencv+Python 色彩通道拆分及合并的示例
Dec 08 Python
django序列化serializers过程解析
Dec 14 Python
基于Python 中函数的 收集参数 机制
Dec 21 Python
python如何求100以内的素数
May 27 Python
Selenium自动化测试工具使用方法汇总
Jun 12 Python
判断Python中的Nonetype类型
May 25 Python
利用Python判断整数是否是回文数的3种方法总结
Jul 07 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 stream_context_create()作用和用法分析
2011/03/29 PHP
ThinkPHP3.1的Widget新用法
2014/06/19 PHP
js 图片缩放(按比例)控制代码
2009/05/27 Javascript
javascript动态添加表格数据行(ASP后台数据库保存例子)
2010/05/08 Javascript
jQuery 表单验证扩展(三)
2010/10/20 Javascript
js跨域问题浅析及解决方法优缺点对比
2014/11/08 Javascript
微信小程序开发之数据存储 参数传递 数据缓存
2017/04/13 Javascript
20行js代码实现的贪吃蛇小游戏
2017/06/20 Javascript
实现图片首尾平滑轮播(JS原生方法—节流)
2017/10/17 Javascript
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
js断点调试经验分享
2017/12/08 Javascript
angularjs结合html5实现拖拽功能
2018/06/25 Javascript
JavaScript设计模式之装饰者模式实例详解
2019/01/17 Javascript
[01:24:16]2018DOTA2亚洲邀请赛 4.6 全明星赛
2018/04/10 DOTA
Python爬虫中urllib库的进阶学习
2018/01/05 Python
pandas 将list切分后存入DataFrame中的实例
2018/07/03 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
PyQt5实现简易电子词典
2019/06/25 Python
win10下python3.8的PIL库安装过程
2020/06/08 Python
django创建css文件夹的具体方法
2020/07/31 Python
HTML5中通过li-canvas轻松实现单图、多图、圆角图绘制,单行文字、多行文字等
2018/11/30 HTML / CSS
HTML5 在canvas中绘制文本附效果图
2014/06/23 HTML / CSS
美国成衣女装品牌:CHICO’S
2016/09/19 全球购物
美国名牌香水折扣网站:Hottperfume
2021/02/10 全球购物
财务主管岗位职责
2014/02/28 职场文书
股权转让协议书
2014/04/12 职场文书
人事经理岗位职责
2014/04/28 职场文书
装修活动策划方案
2014/08/27 职场文书
领导班子四风问题对照检查材料
2014/09/27 职场文书
机关职员工作检讨书
2014/10/23 职场文书
教师党员个人整改措施
2014/10/27 职场文书
装饰技术负责人岗位职责
2015/04/13 职场文书
Python中threading库实现线程锁与释放锁
2021/05/17 Python
Python3的进程和线程你了解吗
2022/03/16 Python
「月刊Action」2022年5月号封面公开
2022/03/21 日漫
Android学习之BottomSheetDialog组件的使用
2022/06/21 Java/Android