刚学到爬虫识别验证码,所以自己建一个获取验证码的类,感兴趣的道友,可以看看,代码如下:

import requests
import time
import os
import re class Pictures:
"""docstring for Pictures"""
def __init__(self, url, request=None, file_dir=None, headers=None):
self.url = url
if not request:
self.requests = requests.session()
else:
self.requests = request
if not file_dir:
self.image_dir = './image/'
else:
self.image_dir = file_dir
if not headers:
self.headers = {
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding':'gzip,deflate',
'Accept-Language':'zh-CN,zh;q=0.8',
'User-Agent':'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36'
}
else:
self.headers = headers '''
保存图片
'''
def save_image(self, url=None):
if url is not None:
self.url = url
if not self.url:
return False
size = 0
number = 0
while size == 0:
try:
img_file = self.requests.get(url=self.url, headers=self.headers)
except self.requests.exceptions.RequestException as e:
raise e # 不是图片跳过
if not self.check_image(img_file.headers['Content-Type']):
return False
file_path = self.image_path(img_file.headers)
# 保存
with open(file_path, 'wb') as f:
f.write(img_file.content)
# 判断是否正确保存图片
size = os.path.getsize(file_path)
if size == 0:
os.remove(file_path)
# 如果该图片获取超过十次则跳过
number += 1
if number >= 10:
break
return file_path if (size > 0) else False '''
图片保存的路径
'''
def image_path(self, header):
# 文件夹
if not os.path.exists(self.image_dir):
os.makedirs(self.image_dir)
# 文件名
file_name = str(time.time()).replace('.', '')
# 文件后缀
suffix = self.img_type(header) return self.image_dir + file_name + suffix '''
获取图片后缀名
'''
def img_type(self,header):
# 获取文件属性
image_attr = header['Content-Type']
pattern = 'image/([a-zA-Z]+)'
suffix = re.findall(pattern, image_attr, re.IGNORECASE)
# 获取后缀
if not suffix:
suffix = 'png'
else:
suffix = suffix[0]
if re.search('jpeg', suffix, re.IGNORECASE):
suffix = 'jpg' return '.' + suffix # 检查是否为图片类型
def check_image(self, content_type):
if 'image' in content_type:
return True
else:
return False if __name__ == '__main__':
image = Pictures('http://my.cnki.net/elibregister/CheckCode.aspx')
for i in range(50):
image.save_image()

python批量下载验证码,用来做验证码处理的更多相关文章

  1. 用Python批量下载DACC的MODIS数据

    本人初次尝试用Python批量下载DACC的MODIS数据,记下步骤,提醒自己,数据还在下载,成功是否未知,等待结果中...... 若有大佬发现步骤有不对之处,望指出,不胜感激. 1.下载Python ...

  2. 用python批量下载贴吧图片 附源代码

    环境:windows 7 64位:python2.7:IDE pycharm2016.1 功能: 批量下载百度贴吧某吧某页的所有帖子中的所有图片 使用方法: 1.安装python2.7,安装re模块, ...

  3. Python 批量下载BiliBili视频 打包成软件

    文章目录 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大家 ...

  4. python批量下载微信好友头像,微信头像批量下载

    #!/usr/bin/python #coding=utf8 # 自行下载微信模块 itchat 小和QQ496631085 import itchat,os itchat.auto_login() ...

  5. 用python批量下载图片

    一 写爬虫注意事项 网络上有不少有用的资源, 如果需要合理的用爬虫去爬取资源是合法的,但是注意不要越界,前一阶段有个公司因为一个程序员写了个爬虫,导致公司200多个人被抓,所以先进入正题之前了解下什么 ...

  6. python——批量下载图片

    前言 批量下载网页上的图片需要三个步骤: 获取网页的URL 获取网页上图片的URL 下载图片 例子 from html.parser import HTMLParser import urllib.r ...

  7. Python - 批量下载 IIS 共享的文件

    1.说明 用 IIS 以WEB形式发布了本地文件夹,提供文件下载,并设置了访问权限:默认下载需要点击一个一个的下载,web界面如下: 3.脚本 执行脚本批量下载文件,会在当前目录创建文件夹,并压缩该文 ...

  8. 用 Python 批量下载百度图片

    ​ 为了做一个图像分类的小项目,需要制作自己的数据集.要想制作数据集,就得从网上下载大量的图片,再统一处理. 这时,一张张的保存下载,就显得很繁琐.那么,有没有一种方法可以把搜索到的图片直接下载到本地 ...

  9. python批量下载图片的三种方法

    一是用微软提供的扩展库win32com来操作IE: win32com可以获得类似js里面的document对象,但貌似是只读的(文档都没找到). 二是用selenium的webdriver: sele ...

随机推荐

  1. num1,随堂笔记(3月10日)

    1.计算机发展史(略) 2.我们所使用的计算机包括了计算机硬件.操作系统和应用程序与网络. 3.计算机硬件构成---CPU(运算器和控制器).内存.硬盘.输入设备和输出设备. ①CPU是计算机的主要计 ...

  2. Django扩展内置User类

    内置User类 使用内置User可以方便实现登录验证,利用Admin管理界面还可以方便添加.删除.修改用户. 一个内置的User类定义了以下字段: username: 用户名 password: 密码 ...

  3. evpp心跳机制

    client server xin good

  4. ubuntu 安装nvidia driver

    错误的命令:sudo apt-get install nvidiar-430好多教程都是这样 sudo apt-get install nvidia-driver-430  很奇怪这个命令变成这样 h ...

  5. VMware虚拟机磁盘文件vmdk单文件转多文件相互转换

    设置环境变量 set PATH=%PATH%;D:\Program Files (x86)\VMware\VMware Workstation    echo %PATH% C:\Users\Admi ...

  6. “jps”命令的用处?

    jps位于jdk的bin目录下,其作用是显示当前系统的java进程情况,及其id号. jps相当于Solaris进程工具ps.不像”pgrep java” 或”ps -ef grep java”,jp ...

  7. java Collections.binarySearch 用法

    package testCollections; import java.util.ArrayList;import java.util.Collections;import java.util.Co ...

  8. MongoDB的安装以及启动

    1.首先什么是MongoDB? MongoDB是一个基于分布式文件存储的数据库,是由c++语言编写的.为web应用提供可扩展的高性能数据的存储方案.是一个介于关系型数据库和非关系型数据库 的中间产品, ...

  9. POJ-2516-Minimum Cost(网络流, 最小费用最大流)

    链接: https://vjudge.net/problem/POJ-2516 题意: Dearboy, a goods victualer, now comes to a big problem, ...

  10. Spring Cloud(2)主要组件应用实例

    SpringCloud SpringCloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.负载均衡.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运行 ...