详解使用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入门教程
Feb 08 Python
python实现ip查询示例
Mar 26 Python
使用pandas对两个dataframe进行join的实例
Jun 08 Python
利用Python如何生成便签图片详解
Jul 09 Python
Python定义函数功能与用法实例详解
Apr 08 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
Mar 09 Python
Selenium向iframe富文本框输入内容过程图解
Apr 10 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
Apr 14 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
Nov 29 Python
next在python中返回迭代器的实例方法
Dec 15 Python
Python实现简繁体转换
Jun 07 Python
使用pd.merge表连接出现多余行的问题解决
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截取中文字符串函数实例
2015/02/23 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
2019/09/30 PHP
javascript TextArea动态显示剩余字符
2008/10/22 Javascript
多浏览器兼容的获取元素和鼠标的位置的js代码
2009/12/15 Javascript
JavaScript 事件冒泡简介及应用
2010/01/11 Javascript
jquery tab标签页的制作
2010/05/10 Javascript
我的NodeJs学习小结(一)
2014/07/06 NodeJs
jQuery元素的隐藏与显示实例
2015/01/20 Javascript
jQuery+canvas实现简单的球体斜抛及颜色动态变换效果
2016/01/28 Javascript
jquery实现点击页面回到顶部
2016/11/23 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
利用jQuery异步上传文件的插件用法详解
2017/07/19 jQuery
react开发教程之React 组件之间的通信方式
2017/08/12 Javascript
JavaScript数据结构之双向链表和双向循环链表的实现
2017/11/28 Javascript
使用 vue-i18n 切换中英文效果
2018/05/23 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
微信小程序使用前置摄像头拍照
2020/10/22 Javascript
Python中函数的用法实例教程
2014/09/08 Python
python实现数组插入新元素的方法
2015/05/22 Python
python和bash统计CPU利用率的方法
2015/07/10 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
Python中django学习心得
2017/12/06 Python
python config文件的读写操作示例
2019/09/27 Python
Python属性和内建属性实例解析
2020/01/14 Python
记一次pyinstaller打包pygame项目为exe的过程(带图片)
2020/03/02 Python
Kingsoft金山公司C/C++笔试题
2016/05/10 面试题
体育教师工作总结的自我评价
2013/10/10 职场文书
2013年保送生自荐信格式
2013/11/20 职场文书
产品销售员岗位职责
2013/12/18 职场文书
学术会议邀请函范文
2014/01/22 职场文书
四个太阳教学反思
2014/02/01 职场文书
用人单位终止解除劳动合同证明书
2014/10/06 职场文书
股权转让协议范本
2014/12/07 职场文书
装修公司工程部经理岗位职责
2015/04/09 职场文书
拉贝日记观后感
2015/06/05 职场文书
Python-typing: 类型标注与支持 Any类型详解
2021/05/10 Python