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重新引入被覆盖的自带function
Jul 16 Python
使用Python编写一个模仿CPU工作的程序
Apr 16 Python
举例讲解Python面相对象编程中对象的属性与类的方法
Jan 19 Python
Linux中安装Python的交互式解释器IPython的教程
Jun 13 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
Jun 14 Python
python merge、concat合并数据集的实例讲解
Apr 12 Python
Python中类的创建和实例化操作示例
Feb 27 Python
浅析python的Lambda表达式
Feb 27 Python
关于pytorch多GPU训练实例与性能对比分析
Aug 19 Python
Python如何实现在字符串里嵌入双引号或者单引号
Mar 02 Python
DataFrame.groupby()所见的各种用法详解
Jun 14 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
Sep 26 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
PHP新手上路(六)
2006/10/09 PHP
纯真IP数据库的应用 IP地址转化成十进制
2009/06/14 PHP
php ios推送(代码)
2013/07/01 PHP
PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
2014/09/29 PHP
PHP动态柱状图实现方法
2015/03/30 PHP
Yii CDBCriteria常用方法实例小结
2017/01/19 PHP
PHP使用DOM对XML解析处理操作示例
2019/07/04 PHP
重载toString实现JS HashMap分析
2011/03/13 Javascript
iframe 上下滚动条如何默认在下方实现原理
2012/12/10 Javascript
如何用js控制frame的隐藏或显示的解决办法
2013/03/20 Javascript
jquery实现通用版鼠标经过淡入淡出效果
2014/06/15 Javascript
jQuery插件Validate实现自定义校验结果样式
2016/01/18 Javascript
如何利用JSHint减少JavaScript的错误
2016/08/23 Javascript
JQuery Ajax WebService传递参数的简单实例
2016/11/02 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
vue项目引入Iconfont图标库的教程图解
2018/10/24 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
2019/06/25 Javascript
判断JavaScript中的两个变量是否相等的操作符
2019/12/21 Javascript
Python模块学习 datetime介绍
2012/08/27 Python
浅要分析Python程序与C程序的结合使用
2015/04/07 Python
python中黄金分割法实现方法
2015/05/06 Python
Python多线程下载文件的方法
2015/07/10 Python
python寻找list中最大值、最小值并返回其所在位置的方法
2018/06/27 Python
python enumerate内置函数用法总结
2020/01/07 Python
Python 面向对象部分知识点小结
2020/03/09 Python
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
试用期员工考核制度
2014/01/22 职场文书
关于爱国的演讲稿
2014/05/07 职场文书
市政管理求职信范文
2014/05/07 职场文书
2015年公务员工作总结
2015/04/24 职场文书
高一英语教学反思
2016/03/03 职场文书
预备党员的思想汇报,你真的会写吗?
2019/06/28 职场文书
Python基础之元类详解
2021/04/29 Python
微信小程序实现录音Record功能
2021/05/09 Javascript
Python数组变形的几种实现方法
2022/05/30 Python
Redis唯一ID生成器的实现
2022/07/07 Redis