300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 爬虫:python爬虫学习笔记之网站保持登录机制及简单验证码处理

爬虫:python爬虫学习笔记之网站保持登录机制及简单验证码处理

时间:2018-11-06 01:34:08

相关推荐

爬虫:python爬虫学习笔记之网站保持登录机制及简单验证码处理

本文是我在使用网易云课堂学习日月光华老师讲的“Python爬虫零基础入门到进阶实战”课程所做的笔记,如果大家觉得不错,可以去看一下老师的视频课,讲的还是很棒的。

一、了解如何保持用户登录状态

二、学会使用cookies登录网站

1.网站保持登录机制

cookies

登录网站后,网站会把登录信息以加密的形式存储于本地浏览器中(本地端)。用以判断登陆状态。session

登陆网站后,网站把登录信息加密后放在服务器端,给本地端一个session id写于cookies。用以判断登陆状态。session也需要cookies,用以保存session id。

使用cookies登录豆瓣网址

登录豆瓣,F12查看自己登陆后的cookie

代码中,请求的时候加入cookies

import requestscookie = '豆瓣网登录后拷贝下来的cookies'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'}url = '/'def deal_cookie(cookie):"""处理cookie成为字典形式:param cookie: 原版cookie:return: 处理后的cookie"""coo = {}for item in cookie.split(';'):k, v = item.split('=', 1)coo[k.strip()] = v.replace('"','')return coocookies = deal_cookie(cookie)response = requests.get(url, headers=headers, cookies=cookies)print('KaiSarH' in response.text)

执行效果图:

由此可见已经登录。

2.会话对象可以保持登录状态

import requests# 初始化会话对象,Session可以跨请求保持cookiess = requests.Session()# 设置cookies.get('/cookies/set/sessioncookie/12345678900')print(s.cookies)# 返回携带cookies.get('/cookies')print(s.get('/cookies').text)

执行结果:

3.使用request直接登录一个网站

找到跳转的网页,找到提交的数据集。构造data,使用post登录。

4.下载验证码图片

import requestsfrom PIL import Image# 使用ByteIO把二进制图片读取进来from io import BytesIOs = requests.Session()headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'}login_pic_url = 'http://yjsy.:8080/pyxx/PageTemplate/NsoftPage/yzm/IdentifyingCode.aspx'pic = requests.get(login_pic_url)pic_img = Image.open(BytesIO(pic.content))# 获取当前验证码并显示pic_img.show()pic_text = input('请输入验证码:')

5.验证码处理——光学字符识别

使用Tesseract引擎

pip install pytesseract安装tesseract-ocr

下载地址:提取码:ahll添加环境变量

①用户变量中添加

②系统变量中添加

③系统变量的Path中添加

添加完毕后,即可进行简单图片识别。

from PIL import Image, ImageOps# 打开后是一个二进制文件img = open('test.jpg', 'rb')# 使用Image读取i = Image.open(img)def init_table(threshold=8):table = []for i in range(256):if i < threshold:table.append(0)else:table.append(1)return table# 改变颜色为灰度值im = i.convert('L')binaryImage = im.point(init_table(), '1')im1 = binaryImage.convert('L')im2 = ImageOps.invert(im1)im3 = im2.convert('1')im4 = im3.convert('L')# 对图像进行放大处理out = im4.resize((120, 38))print(pytesseract.image_to_string(out))### 识别能力很差

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。