python scrapy简单模拟登录的代码分析


Posted in Python onJuly 21, 2021

1、requests模块。直接携带cookies请求页面。

找到url,发送post请求存储cookie。

2、selenium(浏览器自动处理cookie)。

找到相应的input标签,输入文本,点击登录。

3、scrapy直接带cookies。

找到url,发送post请求存储cookie。

# -*- coding: utf-8 -*-
import scrapy
import re
 
class GithubLoginSpider(scrapy.Spider):
    name = 'github_login'
    allowed_domains = ['github.com']
    start_urls = ['https://github.com/login']
 
    def parse(self, response): # 发送Post请求获取Cookies
        authenticity_token = response.xpath('//input[@name="authenticity_token"]/@value').extract_first()
        utf8 = response.xpath('//input[@name="utf8"]/@value').extract_first()
        commit = response.xpath('//input[@name="commit"]/@value').extract_first()
        form_data = {
            'login': 'pengjunlee@163.com',
            'password': '123456',
            'webauthn-support': 'supported',
            'authenticity_token': authenticity_token,
            'utf8': utf8,
            'commit': commit}
        yield scrapy.FormRequest("https://github.com/session", formdata=form_data, callback=self.after_login)
 
    def after_login(self, response): # 验证是否请求成功
        print(re.findall('Learn Git and GitHub without any code!', response.body.decode()))

知识点扩展:

parse_login方法是提交完表单后callback回调函数指定要执行的方法,为了验证是否成功。这里我们直接在response中搜索Welcome Liu这个字眼就证明登录成功。

这个好理解,重点是yield from super().start_resquests(),这个代表着如果一旦登录成功后,就直接带着登录成功后Cookie值,方法start_urls里面的地址。

这样的话登录成功后的response可以直接在parse里面写。

# -*- coding: utf-8 -*-
import scrapy
from scrapy import FormRequest,Request


class ExampleLoginSpider(scrapy.Spider):
    name = "login_"
    allowed_domains = ["example.webscraping.com"]
    start_urls = ['http://example.webscraping.com/user/profile']
    login_url = 'http://example.webscraping.com/places/default/user/login'

    def parse(self, response):
        print(response.text)

    def start_requests(self):
        yield scrapy.Request(self.login_url,callback=self.login)

    def login(self,response):
        formdata = {
            'email':'liushuo@webscraping.com','password':'12345678'}
        yield FormRequest.from_response(response,formdata=formdata,
                                        callback=self.parse_login)
    def parse_login(self,response):
        # print('>>>>>>>>'+response.text)
        if 'Welcome Liu' in response.text:
            yield from super().start_requests()

到此这篇关于python scrapy简单模拟登录的代码分析的文章就介绍到这了,更多相关python scrapy模拟登录的方法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
使用Python装饰器在Django框架下去除冗余代码的教程
Apr 16 Python
python获取指定字符串中重复模式最高的字符串方法
Jun 29 Python
python 分离文件名和路径以及分离文件名和后缀的方法
Oct 21 Python
详解pandas如何去掉、过滤数据集中的某些值或者某些行?
May 15 Python
python pandas写入excel文件的方法示例
Jun 25 Python
python实时检测键盘输入函数的示例
Jul 17 Python
Python字典的概念及常见应用实例详解
Oct 30 Python
PyQt使用QPropertyAnimation开发简单动画
Apr 02 Python
Python 找出出现次数超过数组长度一半的元素实例
May 11 Python
如何用Python 实现全连接神经网络(Multi-layer Perceptron)
Oct 15 Python
用ldap作为django后端用户登录验证的实现
Dec 07 Python
python Tkinter的简单入门教程
Apr 11 Python
python异步的ASGI与Fast Api实现
Jul 16 #Python
Python实现PIL图像处理库绘制国际象棋棋盘
Flask使用SQLAlchemy实现持久化数据
Jul 16 #Python
Python多个MP4合成视频的实现方法
Jul 16 #Python
Python如何解决secure_filename对中文不支持问题
利用Matlab绘制各类特殊图形的实例代码
Flask response响应的具体使用
You might like
DIY一个适配电脑声卡的动圈话筒放大器
2021/03/02 无线电
水质对咖图啡风味的影响具体有哪些
2021/03/03 冲泡冲煮
PHP 之Section与Cookie使用总结
2012/09/14 PHP
解析PHP生成静态html文件的三种方法
2013/06/18 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
2013/06/29 PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
2013/09/30 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
2014/08/19 PHP
PHP实现的AES双向加密解密功能示例【128位】
2018/09/03 PHP
JavaScript 设计模式 安全沙箱模式
2010/09/24 Javascript
javascript 闭包
2011/09/15 Javascript
JS 加入收藏夹的代码(主流浏览器通用)
2013/05/13 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
JavaScript中的bold()方法使用详解
2015/06/08 Javascript
jQuery封装的tab选项卡插件分享
2015/06/16 Javascript
node.js连接mongoDB数据库 快速搭建自己的web服务
2016/04/17 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
nodejs制作爬虫实现批量下载图片
2017/05/19 NodeJs
element-ui 关于获取select 的label值方法
2018/08/24 Javascript
详解VS Code使用之Vue工程配置format代码格式化
2019/03/20 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
Vue数字输入框组件的使用方法
2019/10/19 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
2020/01/11 jQuery
JavaScript装饰者模式原理与用法实例详解
2020/03/09 Javascript
Python网络编程之TCP套接字简单用法示例
2018/04/09 Python
python IDLE 背景以及字体大小的修改方法
2019/07/12 Python
python基于socket实现的UDP及TCP通讯功能示例
2019/11/01 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
2020/01/09 Python
Java爬虫技术框架之Heritrix框架详解
2020/07/22 Python
python之语音识别speech模块
2020/09/09 Python
Python调用JavaScript代码的方法
2020/10/27 Python
css3和jquery实现自定义checkbox和radiobox组件
2014/04/22 HTML / CSS
二手书店创业计划书
2014/01/16 职场文书
不打扫卫生检讨书
2014/02/12 职场文书
保密工作整改报告
2014/11/06 职场文书
HTML5简单实现添加背景音乐的几种方法
2021/05/12 HTML / CSS
Win11 S Mode版本泄露 正式上线后叫做Windows 11 SE
2021/11/21 数码科技