python爬虫教程:用scrapy实现模拟登录

news2024/11/23 13:09:08

前言

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取

背景:

初来乍到的pythoner,刚开始的时候觉得所有的网站无非就是分析HTML、json数据,但是忽略了很多的一个问题,有很多的网站为了反爬虫,除了需要高可用代理IP地址池外,还需要登录。

例如知乎,很多信息都是需要登录以后才能爬取,但是频繁登录后就会出现验证码(有些网站直接就让你输入验证码),这就坑了,毕竟运维同学很辛苦,该反的还得反,那我们怎么办呢?

这不说验证码的事儿,你可以自己手动输入验证,或者直接用云打码平台,这里我们介绍一个scrapy的登录用法。

  • 测试登录地址:http://example.webscraping.com/places/default/user/login

  • 测试主页:http://example.webscraping.com/user/profile

快速登录方法:

我们在这里做了一个简单的介绍,我们都知道scrapy的基本请求流程是start_request方法遍历start_urls列表,然后make_requests_from_url方法,里面执行Request方法,请求start_urls里面的地址,但是这里我们用的不再是GET方法,而用的是POST方法,也就常说的登录。

1. 首先我们改写start_reqeusts方法,

直接GET登录页面的HTML信息(有些人说你不是POST登录么,干嘛还GET,别着急,你得先GET到登录页面的登录信息,才知道登录的账户、密码等怎么提交,往哪里提交)

2. start_request方法GET到数据后,用callback参数,

执行拿到response后要接下来执行哪个方法,然后在login方法里面写入登录用户名和密码(还是老样子,一定要用dict),然后只用Request子类scrapy.FormRequest这个方法提交数据,这我一个的是FormRequest.from_response方m_法。

有些人会问,这个from__response的基本使用是条用是需要传入一个response对象作为第一个参数,这个方法会从页面中form表单中,帮助用户创建FormRequest对象,最最最最重要的是它会帮你把隐藏的input标签中的信息自动跳入表达,使用这个中方法,我们直接写用户名和密码即可,我们在最后面再介绍传统方法。

3. parse_login方法是提交完表单后callback回调函数指定要执行的方法,

为了验证是否成功。这里我们直接在response中搜索Welcome Liu这个字眼就证明登录成功。

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

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

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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()

有的同学可能问了,login方法里面不是应该写reture 么,

其实上面的写法跟下面的这种写法是一样效果,如果再有个CSRF的话,

也可以直接在login里面写拿到CSRF信息,写入到formdata里面跟用户名和密码一起提交。

 return [FormRequest.from_response(response,formdata=formdata,callback=self.parse_login)]

登录成功

传统登录方法:

1、首先要明确一件事情,一般情况下需要登录的网站,不只需要登录用户和密码,接下来我们聊聊上面说的传统登录模式。

用户在登录的时候并不是只需要登录账户信息,除了常见直观的验证码和CSRF信息外,也有可能需要提交其它信息,我们必须把它们都提取到一起提交给服务器。

2、我们在form表单下面找到了一个display:none的div标签,里面的input标签的value值正好是我们要提交的数据,那我们就提取到他。

尾语

最后感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1004656.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python第一次作业练习

题目分析: """ 参考学校的相关规定。 对于四分制,百分制中的90分及以上可视为绩点中的4分,80 分及以上为3分,70 分以上为2分,60 分以上为1分; 五分制中的5分为四分制中的4分,4分为3分&#…

Win10声音无法找到输出设备怎么办

近期有小伙伴反映在使Win10的过程中无法找到声音输出设备,从而导致电脑的声音无法正常的播放,这是怎么回事呢,遇到这种情况应该怎么解决呢,下面小编就给大家详细介绍一下Win10声音无法找到输出设备的解决方法,大家可以…

yolov5+Repulsion损失函数,解决密集遮挡问题(附带代码可用)

文章目录 1.RepLoss 设计思想2.RepLoss 主要工作2.1 吸引项2.2 排斥项(RepGT)2.3 排斥项(RepBox)2.4 总结 3. yolov5Repulsion3.1 rep_loss.py3.2 loss.py3.3 hyp.scratch.yaml 4. 总结 1.RepLoss 设计思想 物体遮挡问题可以分为…

为何付费?免费数据可视化软件的崭露头角

当今,数据可视化在各个领域都扮演着重要的角色。不过,对于一些个人用户、小型企业或教育机构来说,购买昂贵的数据可视化软件可能并不切实际。好消息是,有一些完全免费的数据可视化工具可以帮助你创建令人印象深刻的可视化图表和图…

一百七十四、Hive——Hive动态分区表加载数据时需不需要指定分区名?

一、目的 在Hive的DWD层和DWS层建立动态分区表后,发现动态插入数据时可以指定分区名,也可以不指定分区名。因此,研究一下它们的区别以及使用场景,从而决定在项目的海豚调度HiveSQL的脚本里需不需要指定动态分区的分区名&#xff…

数字孪生相关政策梳理,重点对各行业版块的指导和引领

前言 数字孪生技术作为新型智慧城市建设的创新引领性技术,有利于打造孪生城市运行空间,强化城市大脑基础能力,实现全域时空数据融合。数字孪生技术在推动智慧城市建设方面的作用已越来越受到重视。2021年3月,《国家“十四五”规划…

Java binLog日志监听

监听指定的表去做一些处理逻辑,首先是要开启M有SQL的配置,然后再撸代码。 一、Windows下开启MySQL binLog日志 首先要开启MySQL的BinLog 管理 show variables like %log_bin%; 如果发现是OFF,打开mysql文件夹下面的my.ini,修改一…

Linux创建进程 及父子进程虚拟空间 多进程GDB调试

父子进程的资源是读时共享,写时拷贝,用到某一个资源,比如说改变变量的值的时候才去拷贝这个变量到一个独立的空间 父子进程的关系: 区别: 1.fork()函数的返回值不同 父进程中:>…

c高级day5(9.12)宏和Makefile

1.宏定义 #include<stdio.h> #include<head.h> #define unit32_t unsigned int #define TYPE(a,b) a##b int main(int argc, const char *argv[]) {unit32_t i;TYPE(unit,32_t) j;return 0; } 2.宏函数与有参宏 #include<stdio.h> #include<head.h>…

软件设计师_备考笔记

考试介绍及考点分布情况 考试要求&#xff1a; &#xff08;1&#xff09;掌握数据表示、算术和逻辑运算&#xff1b; &#xff08;2&#xff09;掌握相关的应用数学、离散数学的基础知识&#xff1b; &#xff08;3&#xff09;掌握计算机体系结构以及各主要部件的性能和基…

【c++5道练习题】②

目录 一、验证回文串 二、字符串相加 三、杨辉三角 四、最小栈 五、栈的压入、弹出序列 一、验证回文串 思路&#xff1a; 1、注&#xff1a;for(auto ch : s) -》指将s中每一个字符赋值给ch&#xff0c;ch的改变并不会影响s 但写为for(auto& ch : s) -》指将ch是s中…

【部署】Nginx部署前后端JeecgBoot-Vue3

部署运维 前言前台部署配置服务器地址配置路由访问规则配置后端接口路由访问规则Linux 宝塔傻瓜式部署前台项目 Nginx 命令 前言 前面有提到使用 Window 的 IIS 管理器来部署打包后的前端项目&#xff0c;点击【原文】 跳转到前篇文章。感觉甲方爸爸的描述&#xff0c;似乎有些…

Smartbi吴华夫:后疫情时代,BI发展趋势的观察与应对

沿着旧地图找不到新大陆&#xff0c;“基于指标体系的可视化分析和增强分析”成为BI发展新阶段。Smartbi V11系列新品与时俱进&#xff0c;以指标为核心&#xff0c;同时融合BI应用&#xff0c;赋能管理者和业务&#xff0c;成为引领数字化运营的新航标&#xff01; ——思迈特…

Zabbix监控平台环境部署

Zabbix监控平台环境部署 1.Linux环境部署 hostnamectl set-hostname zabbix_server #修改主机名方便查看 hostnamectl set-hostname zabbix_agent ​ systemctl stop firewalld #关闭防火墙 systemctl disable firewalld #关闭防火墙开机自启 setenforce 0 #关闭SElinu…

微信怎么给自己发消息

前段时间看到一份数据调查&#xff0c;说是到目前为止&#xff0c;全球使用微信的用户已达到10亿多人次&#xff0c;天啊&#xff0c;多么强大的用户群体&#xff01; 这么多人喜欢使用微信&#xff0c;相信大家都知道&#xff0c;微信里面有一个特俗功能&#xff0c;可以自己…

逆向-attack之改写函数的返回地址

#include <stdio.h> #include <stdlib.h> #include <unistd.h> /* * 改写input()函数的返回地址&#xff0c;从而使得breakout()函数在没有直接调用的情况下获得执行 */ void breakout() { puts("Welcome. Have a shell..."); system(…

argparse--命令行参数解析库

文章目录 位置参数help ->描述信息type -> 被转换的类型 可选参数action ->动作基本类型 (store_true)短选项 结合位置参数和可选参数choiceaction ->动作基本类型 (count)default -> 默认值 argparse模块使编写用户友好的命令行变得容易 接口。程序定义了它需要…

6.网络编程套接字(下)

文章目录 4.TCP流套接字编程4.1ServerSocket API4.2Socket API4.3TCP中的长短连接4.4示例一&#xff1a;一发一收&#xff08;长连接&#xff09;4.4.1TCP服务端4.4.2TCP客户端 4.5示例二&#xff1a;请求响应&#xff08;短连接&#xff09;4.5.1TCP服务端4.5.2TCP客户端 4.6再…

32 WEB漏洞-文件操作之文件下载读取全解

目录 介绍利用获取数据库配置文件文件名&#xff0c;参数值&#xff0c;目录符号 涉及案例:Pikachu-文件下载测试-参数Zdns-文件下载真实测试-功能点小米路由器-文件读取真实测试-漏洞RoarCTF2019-文件读取真题复现-比赛百度杯2017二月-Zone真题复现-比赛拓展 下载和读取都差不…

开源大模型ChatGLM2-6B 1. 租一台GPU服务器测试下

0. 环境 租用了1台GPU服务器&#xff0c;系统 ubuntu20&#xff0c;GeForce RTX 3090 24G。过程略。本人测试了ai-galaxy的&#xff0c;今天发现网友也有推荐autodl的。 &#xff08;GPU服务器已经关闭&#xff0c;因此这些信息已经失效&#xff09; SSH地址&#xff1a;* 端…