详解使用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通过装饰器检查函数参数数据类型的方法
Mar 13 Python
使用python和Django完成博客数据库的迁移方法
Jan 05 Python
Python yield与实现方法代码分析
Feb 06 Python
Python使用分布式锁的代码演示示例
Jul 30 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
Nov 14 Python
Python实现定时执行任务的三种方式简单示例
Mar 30 Python
python使用Pandas库提升项目的运行速度过程详解
Jul 12 Python
python nmap实现端口扫描器教程
May 28 Python
解决安装pyqt5之后无法打开spyder的问题
Dec 13 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
Feb 07 Python
深入了解Python 变量作用域
Jul 24 Python
django 获取字段最大值,最新的记录操作
Aug 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中的实现trim函数代码
2007/03/19 PHP
PHP中数据类型转换的三种方式
2015/04/02 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
2015/07/09 PHP
PHP简单实现断点续传下载的方法
2015/09/25 PHP
php数据库操作model类(使用__call方法)
2016/11/16 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
JavaScript 题型问答有答案参考
2010/02/17 Javascript
jQuery 1.5最新版本的改进细节分析
2011/01/19 Javascript
js setTimeout 参数传递使用介绍
2013/08/13 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
JQuery中form验证出错信息的查看方法
2013/10/08 Javascript
JavaScript中原型和原型链详解
2015/02/11 Javascript
jQuery 实现评论等级好评差评特效
2016/05/06 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
Javascript blur与click冲突解决办法
2017/01/09 Javascript
原生js实现无缝轮播图效果
2017/01/11 Javascript
JavaScript中数组常见操作技巧
2017/09/01 Javascript
[原创]jQuery实现合并/追加数组并去除重复项的方法
2018/04/11 jQuery
基于Express框架使用POST传递Form数据
2019/08/10 Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
2020/07/19 Javascript
ant design vue 表格table 默认勾选几项的操作
2020/10/31 Javascript
ES6中的类(Class)示例详解
2020/12/09 Javascript
python使用mysqldb连接数据库操作方法示例详解
2013/12/03 Python
python提取页面内url列表的方法
2015/05/25 Python
详解Python中的日志模块logging
2015/06/19 Python
python3如何将docx转换成pdf文件
2018/03/23 Python
python监控nginx端口和进程状态
2019/09/06 Python
Tensorflow 多线程与多进程数据加载实例
2020/02/05 Python
Tensorflow累加的实现案例
2020/02/05 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
python爬取招聘要求等信息实例
2020/11/20 Python
python集合的新增元素方法整理
2020/12/07 Python
2014年网管工作总结
2014/12/11 职场文书
2014年司法局工作总结
2014/12/11 职场文书
新郎婚礼致辞
2015/07/27 职场文书
python正则表达式re.search()的基本使用教程
2021/05/21 Python