详解使用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 相关文章推荐
采用Psyco实现python执行速度提高到与编译语言一样的水平
Oct 11 Python
python正则表达式match和search用法实例
Mar 26 Python
使用Python将数组的元素导出到变量中(unpacking)
Oct 27 Python
python里使用正则表达式的组嵌套实例详解
Oct 24 Python
python清理子进程机制剖析
Nov 23 Python
详细分析python3的reduce函数
Dec 05 Python
matplotlib.pyplot绘图显示控制方法
Jan 15 Python
python redis 删除key脚本的实例
Feb 19 Python
python视频按帧截取图片工具
Jul 23 Python
Tensorflow:转置函数 transpose的使用详解
Feb 11 Python
总结python多进程multiprocessing的相关知识
Jun 29 Python
Python实现科学占卜 让视频自动打码
Apr 09 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获取目录所有文件并将结果保存到数组(实例)
2013/10/25 PHP
dedecms集成财付通支付接口
2014/12/28 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
PHP判断是否是微信打开还是浏览器打开的方法
2019/02/27 PHP
Javascript中的var_dump函数实现代码
2009/09/07 Javascript
jQuery源码分析之Event事件分析
2010/06/07 Javascript
jquery给图片添加鼠标经过时的边框效果
2013/11/12 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
无刷新预览所选择的图片示例代码
2014/04/02 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
2015/05/06 Javascript
下雪了 javascript实现雪花飞舞
2020/08/02 Javascript
jQuery实现字符串全部替换的方法
2016/12/12 Javascript
bootstrap配合Masonry插件实现瀑布式布局
2017/01/18 Javascript
JavaScript使用ZeroClipboard操作剪切板
2017/05/10 Javascript
jQuery导航条固定定位效果实例代码
2017/05/26 jQuery
微信小程序分页加载的实例代码
2017/07/11 Javascript
利用JQUERY实现多个AJAX请求等待的实例
2017/12/14 jQuery
js构造函数创建对象是否加new问题
2018/01/22 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
2018/08/07 Javascript
Vue的watch和computed方法的使用及区别介绍
2018/09/06 Javascript
vue-resourc发起异步请求的方法
2020/02/11 Javascript
[01:13:01]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第三场
2018/04/05 DOTA
virtualenv 指定 python 解释器的版本方法
2018/10/25 Python
Python2和Python3中urllib库中urlencode的使用注意事项
2018/11/26 Python
python-opencv颜色提取分割方法
2018/12/08 Python
Linux下升级安装python3.8并配置pip及yum的教程
2020/01/02 Python
python lambda函数及三个常用的高阶函数
2020/02/05 Python
Python包和模块的分发详细介绍
2020/06/19 Python
简单掌握CSS3中resize属性的用法
2016/04/01 HTML / CSS
中国综合网上购物商城:苏宁易购
2016/08/09 全球购物
社区艾滋病宣传活动总结
2015/05/07 职场文书
2015年小学财务工作总结
2015/07/20 职场文书
python pyhs2 的安装操作
2021/04/07 Python
Python 处理表格进行成绩排序的操作代码
2021/07/26 Python
Spring Boot项目传参校验的最佳实践指南
2022/04/05 Java/Android