Python网络爬虫模拟登录与验证解析

内容导读

使用Selenium模拟登录

使用Cookies登录网站

模拟表单登录网站

爬虫识别简单的验证码

实例解析

一、使用Selenium模拟登录

1、为什么要模拟登录

在互联网上存在大量需要登录才能访问的网站,要爬取这些网站,就需要学习爬虫的模拟登录。对于一个需要登录才能访问的网站,它的页面在登录前和登录后可能是不一样的。

如果直接使用requests去获取源代码,只能得到登录以前的页面源代码。接下来我们使用pyhton实现网络的模拟登录与注册,最终达到爬取网站内容的目的。

示例分析如下:

但是如果没有登录,访问知乎首页会自动跳转到登录页面,看到的是如图所示页面。

如果使用requests直接获取知乎首页,可以看到源代码明显是未登录状态的,如上图所示。

模拟登录有多种实现方法,使用Selenium操作浏览器登录和使用Cookies登录虽然简单粗暴,但是有效。使用模拟提交表单登录虽然较为麻烦,但可以实现自动化。

2、使用Selenium模拟登录

使用Selenium来进行模拟登录,整个过程非常简单。流程如下。

(1)初始化ChromeDriver。

(2)打开知乎登录页面。

(3)找到用户名的输入框,输入用户名。

(4)找到密码输入框,输入用户名。

(5)手动单击验证码。

(6)按下Enter键。

以上过程,若使用Selenium,一般情况下只需要不到20行代码就可以完成!

根据本站分享的Selenium的用法,这里的代码看起来就很轻松了。

程序首先打开知乎的登录页面,然后使用“find_element_by_ name”分别找到输入账号和密码的两个输入框。

这两个输入框的name属性值分别为“account”和“password”,如图所示。

在Selenium中可以使用send_keys()方法往输入框中输入字符串。

在输入了密码以后,验证码框就会弹出来。知乎使用的验证码为点击倒立的文字,这种验证码不容易自动化处理,因此在这个地方让爬虫先暂停,手动点击倒立文字。

爬虫中的input()语句会阻塞程序,直到在控制台按下Enter键,爬虫才会继续运行,如图所示。

接下来,爬虫模拟按下Enter键的动作,触发知乎的登录行为,实现登录。登录成功以后,界面如图所示。

二、使用Cookies登录

Cookie是用户使用浏览器访问网站的时候网站存放在浏览器中的一小段数据。Cookie的复数形式Cookies用来表示各种各样的Cookie。

它们有些用来记录用户的状态信息;有些用来记录用户的操作行为;还有一些,具有现代网络最重要的功能:记录授权信息,即用户是否登录以及用户登录哪个账号。

为了不让用户每次访问网站都进行登录操作,浏览器会在用户第一次登录成功以后放一段加密的信息在Cookies中。下次用户访问,网站先检查Cookies有没有这个加密信息,如果有并且合法,那么就跳过登录操作,直接进入登录后的页面。

通过已经登录的Cookies,可以让爬虫绕过登录过程,直接进入登录以后的页面。

在已经登录知乎的情况下,打开Chrome的开发者工具,定位到“Network”选项卡,然后刷新网页,在加载的内容中随便选择一项,然后看右侧的数据,从Request Headers中可以找到Cookie,如图所示。

请注意:这里一定是“Request Headers”,不要选成了“Response Headers”。

只要把这个Request Headers的内容通过requests提交,就能直接进入登录以后的知乎页面了,如图所示。

由于登录以后的知乎页面的HTML代码全部缩在了一行,所以在PyCharm里面看起来不太方便。不过从输出的部分文字可以证明,确实已经是登录以后的页面。

可以看到,使用Cookie来登录网页,不仅可以绕过登录步骤,还可以绕过网站的验证码。

在如上图所示的代码中,使用了requests的Session模块。

所谓Session,是指一段会话。网站会把每一个会话的ID(Session ID)保存在浏览器的Cookies中用来标识用户的身份。requests的Session模块可以自动保存网站返回的一些信息。

其实在前面章节中使用的requests.get(),在底层还是会先创建一个Session,然后用Session去访问。

对于HTTPS的网站,在requests发送请求的时候需要带上verify=False这个参数,否则爬虫会报错。

带上这个参数以后,爬虫依然会报一个警告,这是因为没有HTTPS的证书。

不过这个警告不会影响爬虫的运行结果。对于有强迫症的读者,可以参考相关内容为requests设置证书,从而解除这个警告。

三、模拟表单登录

在本站其它已介绍通过POST提交请求解决了AJAX版登录页面的爬取。但是在现实中,有更多的网站是使用表单提交的方式来进行登录的。

这里将要讲解如何解决表单登录的问题,首先打开练习页会自动打开登录页面,如图所示。

这个登录页面与之前介绍的AJAX登录的页面非常相似。但是这里多了一个“自动登录”复选框。

输入用户名kingname,密码genius,勾选“自动登录”复选框并单击“登录”按钮,可以看到登录成功后的页面,如图所示。

根据前面的经验,遇到这种问题应首先打开Chrome的开发者工具并监控登录过程。

然而,仔细观察会发现登录请求的那个网址只会在“Network”选项卡中存在1s,然后就消失了。

"Network"选项卡下面只剩下登录成功后的页面所发起的各种网络请求,如图所示。

这是因为表单登录成功以后会进行页面跳转,相当于开了一个新的网页,于是新的请求就会直接把旧的请求覆盖。

为了避免这种情况,需要在Chrome的开发者工具的“Network”选项卡中勾选“Preserve log”复选框,再一次登录就可以看到登录过程,如图所示。

此时可以看到Status Code是302,说明这里有一个网页跳转,也就证明了之前为什么登录以后看不到登使用requests的Session模块来模拟这个登录,其运行结果如图所示。

四、爬虫识别简单的验证码

4.1 肉眼打码

对于一次登录就可以长时间使用的情况,只需要识别一次验证码即可。

这种情况下,与其花时间开发一个自动识别验证码的程序,不如直接肉眼识别。肉眼识别验证码有两种情况,借助浏览器与不借助浏览器。

1、借助浏览器

在模拟登录中讲到过Cookies,通过Cookies能实现绕过登录,从而直接访问需要登录的网站。因此,对于需要输入验证码才能进行登录的网站,可以手动在浏览器登录网站,并通过Chrome获取Cookies,然后使用Cookies来访问网站。这样就可以实现人工输入一次验证码,然后很长时间不再登录。

2、不借助浏览器

对于仅仅需要识别图片的验证码,可以使用这种方式——先把验证码下载到本地,然后肉眼去识别并手动输入给爬虫。

手动输入验证码的一般流程如下。

(1)爬虫访问登录页面。

(2)分析网页源代码,获取验证码地址。

(3)下载验证码到本地。

(4)打开验证码,人眼读取内容。

(5)构造POST的数据,填入验证码。

(6)POST提交。

需要注意的是,其中的(2)、(3)、(4)、(5)、(6)步是一气呵成的,是在爬虫运行的时候做的。绝对不能先把爬虫程序关闭,肉眼识别验证码以后再重新运行。

打开验证码练习页面http://exercise.kingname.info/exercise_captcha.html(如果没有,可以创建一个网页),可以看到在这个页面需要输入验证码,如图所示。

打开源代码页面,可以看到验证码的地址,如图所示。

源代码给出的是一个相对路径,所以图片的实际网址为网站域名+相对路径,即http://exercise.kingname.info/static/captcha/1500558784. 9632132.png。

文件名一看就是使用Python的time.time()生成的时间戳。在知道了图片的网址以后,就可以使用requests将验证码下载下来,再肉眼识别。一旦验证码被识别了出来,那么剩下的工作就和一般的POST提交没有什么两样了。

识别验证码的完整代码如下图所示。

4.2 自动打码

1、Python图像识别

Python的强大,在于它有非常多的第三方库。

对于验证码识别,Python也有现成的库来使用。

开源的OCR库pytesseract配合图像识别引擎tesseract,可以用来将图片中的文字转换为文本。

这种方式在爬虫中的应用并不多见。因为现在大部分的验证码都加上了干扰的纹理,已经很少能用单机版的图片识别方式来识别了。

所以如果使用这种方式,只有两种情况:网站的验证码极其简单工整,使用大量的验证码来训tesseract。

(1)安装tesseract

Windows系统中:下载安装包 https://github.com/ tesseract-ocr/tesseract/wiki/Downloads,

在“3rd party Windows exe's/ installer”下面可以找到.exe安装包。

Mac系统中:可以通过Homebrew安装:brew install tesseract

Ubuntu系统中:可以直接通过apt-get安装:sudo apt-get install tesseract-orc

(2)安装Python库

要使用tesseract来进行图像识别,需要安装两个第三方库:

pip install Pillow

pip install pytesseract

其中,Pillow是Python中专门用来处理图像的第三方库,pytesseract是专门用来操作tesseract的第三方库。

(3)tesseract的使用

tesseract的使用非常简单。

① 导入pytesseract和Pillow。

② 打开图片。

③ 识别。

通过以下代码来实现最简单的图片识别:

import pytesseract

from PIL import Image

image = Image.open('验证码.png')

code = pytesseract.image_to_string(image)

print(code)

运行结果如图所示。

如果使用Mac OS,并且使用Homebrew安装tesseract,那么有可能程序会报以下错误:

FileNotFoundError: [Errno2] No such file or directory: ‘tesseract’

这是因为Homebrew没有把tesseract加入到系统的环境变量的缘故。

要解决这个问题,需要修改Python安装文件夹下面的lib/site-packages/pytesseract文件夹中的pytesseract.py文件,将第21行的代码:

tesseract_cmd = 'tesseract'

修改为:

tesseract_cmd = '/usr/local/bin/tesseract'

修改代码如下图所示。

要找到这个文件,最简单的办法是在PyCharm中先使用import导入pytesseract。

在Windows和Linux系统中按下Ctrl键并单击“pytesseract”即可。

使用Mac OS系统的读者按下Command键并单击“pytesseract”即可。

这样,PyCharm就会自动打开这个文件。

2、打码网站

(1)打码网站介绍

在线验证码识别的网站,简称打码网站。这些网站有一些是使用深度学习技术识别验证码,有一些是雇佣了很多人来人肉识别验证码。

网站提供了接口来实现验证码识别服务。使用打码网站理论上可以识别任何使用输入方式来验证的验证码。

这种打码网站的流程一般是这样的。

① 将验证码上传到网站服务器。

② 网站服务器将验证码分发给打码工人。

③ 打码工人肉眼识别验证码并上传结果。

④ 网站将结果返回。

(2)使用在线打码

在百度或者谷歌上面搜索“验证码在线识别”,就可以找到很多提供在线打码的网站。但是由于一般这种打码网站是需要交费才能使用的,所以要注意财产安全。

这里使用一个名称为“云打码”的网站来进行测试。如果此时不能打开此网站,可以从网络搜索其他打码网站。

注册账号以后,需要交费购买才能正常使用。

这个网站虽然提供了各种语言的SDK,但是版本都比较旧了,所以建议使用HTTP接口。

虽然HTTP 接口文档给出了上传的地址,但是不要去看它提供的“PythonHTTP调用示例”,因为这个示例有问题。

它的HTTP接口的正确使用步骤如下:

① 首先访问http://yundama.com/download/YDMHttp.html,获得软件KEY,如图所示。

② 使用POST方式上传图片,并接收返回信息。

③ 网速足够好的时候,立刻就可以从返回的信息中得到验证码。如果返回的数据没有验证码,转步骤④。

④ 获取cid,并使用GET方式反复访问http://api.yundama.com/api.php? cid= <cid>&method=result,直到获取到验证码为止。

注意事项:

如果此打码网站不可使用,可通过搜索引擎寻找其他的打码网站。

通过看打码网站的文档来学习怎么使用,根据网站的说明把打码网站的接口集成到爬虫当中。

由于这种打码网站鱼龙混杂,而且小网站众多,因此在选择网站的时候,需要注意以下几点:

① 拒绝实名制,不要选择任何需要提供手机号及身份证照片的网站。

② 注册邮箱请使用小号,单独使用密码。

③ 如果要交费,注意交费地址。

④ 只使用支付宝扫二维码或者微信扫二维码支付,反复确认交费金额,不要在网站上输入密码。

⑤ 一次交费不要超过10元。

⑥ 尽量不要使用百度。

五、实例解析

模拟登录并验证并爬取网站内容。

1、需求分析

目标网站:果壳网 https://www.guokr.com。

目标内容:个人资料设置界面源代码。

使用模拟登录与验证码识别的技术实现自动登录果壳网。

果壳网的登录界面有验证码,请使用人工或者在线打码的方式识别验证码,并让爬虫登录。

登录以后可以正确显示“个人资料设置”界面的源代码。

涉及的知识点:

(1)爬虫识别验证码。

(2)爬虫模拟登录。

2、核心代码构建

在模拟登录果壳网的时候,POST提交的数据有两个参数:csrf_token和captcha_ rand。

这两个参数需要使用XPath或者正则表达式从网页源代码中获取。登录果壳网所需要的参数如图所示。

获取的csrf_token和captcha_rand位置如图。

3、运行与调试

代码运行以后的结果如图。

从图中也可以看到,使用在线打码的方式,验证码没有即时返回每一秒去打码网站查询的过程。

最后打开的源代码HTML标题为“个人资料”,说明已经成功登录。

好了,关于模拟登录与验证就讲到这里。

更多精彩内容请继续关注本站!

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

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

相关文章

TC-RAG: Turing-Complete RAG--图灵完备的检索增强

摘要&#xff1a; 在提升领域特定的大语言模型&#xff08;LLMs&#xff09;的方法中&#xff0c;检索增强生成&#xff08;RAG&#xff09;技术作为一种有前景的解决方案&#xff0c;可以缓解诸如幻觉、知识过时以及在高度专业化查询中专业知识有限等问题。然而&#xff0c;现…

WPF- vs中的WPF应用项目模板 如何自己实现

读书笔记 1. 单个 c#文件的 空白window应用程序 (只展示了一个button按钮) 2.C#文件 和xml文件 的空白window程序 .xml文件作为程序的资源 (只一个button按钮) 3. xmal和c#共同编译 形如使用VS 创建WPF应用项目模板 1.新建一个wpf空白项目 ,添加一个主c#文件 和xaml文件(属…

【C++ Primer Plus习题】7.2

问题: 解答: #include <iostream> using namespace std;#define MAX 10int input(float* grade, int len) {int i 0;for (i 0; i < len; i){cout << "请输入第" << i 1 << "个高尔夫成绩(按0结束):";cin >> grade[i]…

【二叉树进阶】--- 前中后序遍历非递归

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 算法Journey 本篇博客我们将来了解有关二叉树前中后序遍历的非递归版本。 &#x1f3e0; 前序遍历 要迭代非递归实现二叉树的前序遍历&#xff0c;首先还…

【Android】MotionLayout实现动画效果

【Android】MotionLayout实现开场动画 在移动应用开发中&#xff0c;动画不仅仅是美化界面的工具&#xff0c;它更是提升用户体验的关键手段。Android 平台一直以来都提供了丰富的动画框架&#xff0c;但随着应用复杂性的增加&#xff0c;开发者对动画的需求也变得更加复杂和多…

如何通过WinRAR软件有效禁止RAR压缩包内文件的修改

RAR压缩包作为一种广泛使用的文件格式&#xff0c;凭借其高压缩比和强大的功能&#xff0c;成为了许多用户保存和传输文件的首选。然而&#xff0c;在某些情况下&#xff0c;我们可能希望确保RAR压缩包内的文件不被随意修改或删除&#xff0c;以维护文件的安全性和完整性。本文…

【网络】数据链路层-MAC帧

数据链路层-以太网与ARP协议 文章目录 1.数据链路层2.以太网2.1什么是以太网2.2MAC帧格式 3.ARP协议3.1为什么有ARP协议&#xff1f;3.2ARP的定位3.3ARP协议工作流程3.4ARP数据格式 4.RARP协议 1.数据链路层 数据链路层是网络协议栈中最底层的内容&#xff0c;而在之前对其他…

恶劣天气下的目标检测新突破:多尺度退化建模与特征融合策略

更多优质内容&#xff0c;请关注公众号&#xff1a;智驾机器人技术前线 1.论文信息 论文标题&#xff1a;Degradation Modeling for Restoration-enhanced Object Detection in Adverse Weather Scenes 作者&#xff1a;Xiaofeng Wang, Xiao Liu, Hong Yang, Zhengyong Wang, …

阿里PAI-ChatLearn:大规模 Alignment高效训练框架正式开源

导读 ChatGPT是OpenAI开发的基于大型语言模型(LLM)的聊天机器人&#xff0c;以其令人惊叹的对话能力而迅速火爆并被广泛采用。ChatGPT 成功背后得益于大型语言模型生成领域的新训练范式&#xff1a;RLHF (Reinforcement Learning from Human Feedback)&#xff0c;即以强化学习…

PTA L1-028 判断素数

L1-028 判断素数&#xff08;10分&#xff09; 本题的目标很简单&#xff0c;就是判断一个给定的正整数是否素数。 输入格式&#xff1a; 输入在第一行给出一个正整数N&#xff08;≤ 10&#xff09;&#xff0c;随后N行&#xff0c;每行给出一个小于的需要判断的正整数。 …

利用clip模型实现text2draw

参考论文 实践 有数据增强的代码 import math import collections import CLIP_.clip as clip import torch import torch.nn as nn from torchvision import models, transforms import numpy as np import webp from PIL import Image import skimage import torchvision …

滚柱导轨:数控机床高效运行的驱动力

机床制造者最关心的莫过于机床的精度&#xff0c;刚性和使用寿命&#xff0c;对导轨系统的关注甚少。但导轨为机床功能的实现奠定了可靠的基础&#xff0c;各种类型的机床工作部件&#xff0c;都是利用控制轴在指定的导轨上运动。机床设计者根据机床的类型和用途选用各种不同形…

Python进阶04-网络编程

零、文章目录 Python进阶04-网络编程 1、计算机网络 网络相关知识请参考计算机网络详解 &#xff08;1&#xff09;IP地址的概念 IP 地址就是标识网络中设备的一个地址&#xff0c;好比现实生活中的家庭地址。 &#xff08;2&#xff09;IP地址的表现形式 IP 地址分为两类…

【Python Web开发】Flask+HTML学习笔记

目录 Flask框架一、安装flask库二、运行一个网页三、库函数及变量 HTML标签语言一、基本格式二、标签2.1 块级标签2.1.1 标题2.1.2 div2.1.3 图片2.1.4 列表2.1.5 表格 2.2 行内标签2.2.1 span2.2.2 超链接2.2.3 输入 2.3 其他标签2.3.1 提交表单 Flask框架 一、安装flask库 …

探索Unity与C#的无限潜能:从新手到高手的编程之旅

在数字创意与技术创新交织的今天&#xff0c;Unity游戏引擎凭借其强大的跨平台能力和灵活的编程接口&#xff0c;成为了无数开发者心中的首选。而C#&#xff0c;作为Unity的官方脚本语言&#xff0c;更是以其面向对象的特性和丰富的库支持&#xff0c;为游戏开发注入了无限可能…

Golang | Leetcode Golang题解之第375题猜数字大小II

题目&#xff1a; 题解&#xff1a; func getMoneyAmount(n int) int {f : make([][]int, n1)for i : range f {f[i] make([]int, n1)}for i : n - 1; i > 1; i-- {for j : i 1; j < n; j {f[i][j] j f[i][j-1]for k : i; k < j; k {cost : k max(f[i][k-1], f[…

【JAVA入门】Day28 - 数据结构

【JAVA入门】Day28 - 数据结构 文章目录 【JAVA入门】Day28 - 数据结构一、栈二、队列三、数组3.1 ArrayList 四、链表4.1 LinkedList 五、二叉树5.1 二叉查找树5.2 二叉树的遍历方式5.3 平衡二叉树5.4 平衡二叉树的旋转5.5 平衡二叉树需要旋转的几种情况 六、红黑树6.1 红黑规…

永成防回水防回气装置煤矿毫不犹豫选择

永成防回水防回气装置煤矿毫不犹豫选择&#xff0c;不敢说我们有多好&#xff0c;我们只把简单的事做好&#xff0c;用心服务&#xff0c;因为品质&#xff0c;所以信任。因为信任&#xff0c;所以值得选择。 本防回水防回气装置是一种用于煤矿瓦斯管路爆渣和燃烧时防止回火、…

3_1_PID控制原理

自从计算机进入控制领域以来&#xff0c;用数字计算机代替模拟计算机调节器组成计算机控制系统&#xff0c;不仅可以用软件实现PID控制算法&#xff0c;而且可以利用计算机的逻辑功能&#xff0c;使PID控制更加灵活。数字PID控制在生产过程中是一种最普遍采用的控制方法&#x…

[Algorithm][综合训练][奇数位丢弃][求和][计算字符串的编辑距离]详细讲解

目录 1.奇数位丢弃1.题目链接2.算法原理详解 && 代码实现 2.求和1.题目链接2.算法原理详解 && 代码实现 3.计算字符串的编辑距离1.题目链接2.算法原理详解 && 代码实现 1.奇数位丢弃 1.题目链接 奇数位丢弃 2.算法原理详解 && 代码实现 解法…