首页 > 编程语言 >【Python小工具】爬虫之获取图片验证码

【Python小工具】爬虫之获取图片验证码

时间:2022-10-08 14:38:41浏览次数:54  
标签:img Python 爬虫 验证码 headers Cookie url dir 图片


Python小工具系列是一个使用Python实现各种各样有意思的小玩意儿的系列,包括制作个性化的二维化、词云、简单爬虫等,持续更新中,如果你感兴趣就关注一波吧!

一、基本介绍

接上一篇使用OpenCV识别网站的数字+字母验证码,忽然想起来自己还没有介绍怎么拿到网站的验证码。

下面是我要获取的验证码截图:

【Python小工具】爬虫之获取图片验证码_验证码

因此这篇博客就来介绍一下我所遇到的一种情况:即需要携带Cookie去请求图片,并保存在本地指定路径。

二、具体代码

# 拿到教务系统验证码图片并保持到code.jpg文件中
def get_code_img():
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36'
}
# 教务系统的url
url = 'https://jwxt0.xxx.edu.cn/default2.aspx'
rep = requests.get(url=url, headers=headers)
page_text = rep.text
# 数据解析
tree = etree.HTML(page_text)
code_img_url = 'https://jwxt0.xxx.edu.cn' + tree.xpath('//div[@class="jympic"]/img/@src')[0]
print(code_img_url)

# 进一步解析
img_headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
"Cookie": rep.headers['Set-Cookie'], # 获取headers中的Cookie并携带(否则就拿不到二维码图片)
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36'
}
# 发送请求图片
res = requests.get(url=code_img_url, headers=img_headers)

# 设置一个变量,该变量为指定保存的路径,windows系统下的 D盘,test目录
dir_name = 'D:\\Study\\python\\pythonProject\\pythonProject\\CrawlerStudy\\images'

# 判断 指定目录,如果不存在该目录,则创建该目录
if not os.path.exists(dir_name):
os.mkdir(dir_name)
# 指定路径(拼接上图片名及后缀
path = dir_name + '\\verification.jpg'

# 把获取的二进制写入图片文件 (注意:这里直接写入在Pycharm中可能只显示创建的目录而不显示文件,在文件夹中打开就可)
with open(path, mode='wb') as f:
f.write(res.content)
# 将图片文件的保存路径返回
return

⭕️:注意!

  1. 这里只展示了获取验证码图片方法,其中使用的库or模块还需要自己提前导入的。
    (此爬虫仅用于学习交流,不涉及任何商业利益 ^_^)
  2. 此处的url原本是我所在学校教务系统的地址,已做修改,大家复制后是无法直接运行的(可以替换为自己想爬的登陆地址)

三、注意事项

1.步骤

这里首先要获取到目标网站的内容,然后定位到图片(此处我使用的是xpath),获取图片的src。作为新的请求地址

【Python小工具】爬虫之获取图片验证码_html_02


拿到地址后存储在本地文件夹中,方便后续使用OpenCv进行识别或者模型训练。具体代码如下:

# 判断 指定目录,如果不存在该目录,则创建该目录
if not os.path.exists(dir_name):
os.mkdir(dir_name)
# 指定路径(拼接上图片名及后缀
path = dir_name + '\\verification.jpg'

# 把获取的二进制写入图片文件 (注意:这里直接写入在Pycharm中可能只显示创建的目录而不显示文件,在文件夹中打开就可)
with open(path, mode='wb') as f:
f.write(res.content)

2.原理

有的网站可能直接就放图片的链接,那么就可以直接请求链接,保存到本地,然后进行识别。

但是此处图片是从服务器请求的,每点击一次就会请求一次,所以要求必须携带跳转前分配的Cookie,已保证返回的是不同的验证码。所以很重要的一步就是在headers中携带Cookie(这个Cookie是之前就分配给rep的headers中的Set-Cookie中的,因此可以直接拿到)。

【Python小工具】爬虫之获取图片验证码_验证码_03


标签:img,Python,爬虫,验证码,headers,Cookie,url,dir,图片
From: https://blog.51cto.com/u_15818359/5737602

相关文章