详解使用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使用htmllib分析网页内容的方法
May 08 Python
Python使用正则表达式抓取网页图片的方法示例
Apr 21 Python
详解python里使用正则表达式的全匹配功能
Oct 19 Python
Python爬取附近餐馆信息代码示例
Dec 09 Python
python 对key为时间的dict排序方法
Oct 17 Python
Django框架用户注销功能实现方法分析
May 28 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
Apr 10 Python
Pycharm IDE的安装和使用教程详解
Apr 30 Python
python用tkinter实现一个gui的翻译工具
Oct 26 Python
Python plt 利用subplot 实现在一张画布同时画多张图
Feb 26 Python
pytorch加载预训练模型与自己模型不匹配的解决方案
May 13 Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 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
DC漫画《蝙蝠侠和猫女》图透 猫女怀孕老爷当爹
2020/04/09 欧美动漫
解析isset与is_null的区别
2013/08/09 PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
2016/09/01 PHP
php 多文件上传的实现实例
2016/10/23 PHP
php中如何执行linux命令详解
2018/11/06 PHP
List Installed Software Features
2007/06/11 Javascript
JavaScript字符串String和Array操作的有趣方法
2012/12/18 Javascript
使用jquery实现简单的ajax
2013/07/08 Javascript
js获取url参数值的两种方式
2013/09/10 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
jQuery判断浏览器并动态调整select宽度的方法
2016/03/02 Javascript
Nodejs Stream 数据流使用手册
2016/04/17 NodeJs
JavaScript数据存储 Cookie篇
2016/07/02 Javascript
归纳下js面向对象的几种常见写法总结
2016/08/24 Javascript
基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息
2016/08/29 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
2017/01/10 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
了解Javascript中函数作为对象的魅力
2019/06/19 Javascript
js实现图片区域可点击大小随意改变(适用移动端)代码实例
2019/09/11 Javascript
Servlet返回的数据js解析2种方法
2019/12/12 Javascript
Vue 如何使用props、emit实现自定义双向绑定的实现
2020/06/05 Javascript
详解Vue之计算属性
2020/06/20 Javascript
python TCP Socket的粘包和分包的处理详解
2018/02/09 Python
Python列表切片操作实例总结
2019/02/19 Python
使用Python Pandas处理亿级数据的方法
2019/06/24 Python
在Pytorch中使用样本权重(sample_weight)的正确方法
2019/08/17 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
2020/05/22 Python
浅析PyCharm 的初始设置(知道)
2020/10/12 Python
一个不错的HTML5 Canvas多层点击事件监听实例
2014/04/29 HTML / CSS
英国山地公路自行车商店:Tweeks Cycles
2018/03/16 全球购物
渗透攻击的测试步骤
2014/06/07 面试题
考试退步检讨书
2014/01/15 职场文书
2014年教师党员公开承诺书
2014/05/28 职场文书
预备党员群众路线思想汇报2014
2014/10/25 职场文书
《小乌鸦爱妈妈》教学反思
2016/02/19 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python