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 相关文章推荐
Tornado Web服务器多进程启动的2个方法
Aug 04 Python
python实现感知器
Dec 19 Python
OpenCV-Python实现轮廓检测实例分析
Jan 05 Python
ubuntu安装mysql pycharm sublime
Feb 20 Python
python自动发送邮件脚本
Jun 20 Python
python中datetime模块中strftime/strptime函数的使用
Jul 03 Python
Python 利用切片从列表中取出一部分使用的方法
Feb 01 Python
python使用Plotly绘图工具绘制气泡图
Apr 01 Python
Python:type、object、class与内置类型实例
Dec 25 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
Sep 29 Python
python爬虫中PhantomJS加载页面的实例方法
Nov 12 Python
Python爬虫之App爬虫视频下载的实现
Dec 08 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
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
2006/10/09 PHP
PHP脚本中include文件出错解决方法
2008/11/20 PHP
php获取从百度搜索进入网站的关键词的详细代码
2014/01/08 PHP
PHP遍历并打印指定目录下所有文件实例
2014/02/10 PHP
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
js之WEB开发调试利器:Firebug 下载
2007/01/13 Javascript
学习YUI.Ext 第二天
2007/03/10 Javascript
js图片轮播手动切换效果
2015/11/10 Javascript
Angular设置title信息解决SEO方面存在问题
2016/08/19 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
基于AngularJS实现iOS8自带的计算器
2016/09/12 Javascript
微信小程序canvas写字板效果及实例
2017/06/15 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
2017/06/19 Javascript
webpack实现热更新(实施同步刷新)
2017/07/28 Javascript
vue使用自定义icon图标的方法
2018/05/14 Javascript
vue将毫秒数转化为正常日期格式的实例
2018/09/16 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
javascript中call()、apply()的区别
2019/03/21 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
2020/09/02 Javascript
vue打开子组件弹窗都刷新功能的实现
2020/09/21 Javascript
[44:15]国士无双DOTA2 6.82版本详解(上)
2014/09/28 DOTA
python的staticmethod与classmethod实现实例代码
2018/02/11 Python
Python比较2个时间大小的实现方法
2018/04/10 Python
pyspark 读取csv文件创建DataFrame的两种方法
2018/06/07 Python
python中从str中提取元素到list以及将list转换为str的方法
2018/06/26 Python
python操作excel文件并输出txt文件的实例
2018/07/10 Python
Python中staticmethod和classmethod的作用与区别
2018/10/11 Python
HTML5之WebGL 3D概述(上)—WebGL原生开发开启网页3D渲染新时代
2013/01/31 HTML / CSS
美国名牌太阳镜折扣网站:Eyedictive
2017/05/15 全球购物
新媒传信软件测试面试题
2013/02/24 面试题
举例说明类变量和实例变量的区别
2016/06/30 面试题
房地产营销策划方案
2014/02/08 职场文书
公司活动方案范文
2014/03/06 职场文书
开发房地产协议书
2014/09/14 职场文书
工程技术负责人岗位职责
2015/04/13 职场文书
建房合同协议书
2016/03/21 职场文书