2021/7/1爬虫第三十一次课(反反爬措施一之代理ip与打码平台)

一、运用ip代理(一个代理ip尽量只一个人用)

这里的ip指的是网络ip
代理ip,网上自己找(免费或付费)
推荐两个:

  • “豌豆HTTP”:免费,具体使用,看之前的
  • “快代理”:付费
    在这里插入图片描述

介绍:(有试用期限)
私密代理与独享代理:可靠性高,难点在于代码格式:

proxies = {'协议':'协议://用户名:密码@ip:端口号'}

开放代理:类似免费的,可靠性稍微好一点,不推荐
关键要学会测试代理ip是否可用
源代码:

import requests

class Proxy:
    def __init__(self):
        self.proxy_url = 'http://dev.kdlapi.com/api/getproxy/?orderid=992520441312817&num=20&protocol=2&method=1&an_ha=1&sep=2'#代理链接
        self.test_url = 'https://www.baidu.com/'
        self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36'}


    def get_proxy(self):
        html = requests.get(url=self.proxy_url,headers=self.headers).text
        proxy_list = html.split('\n')
        for proxy in proxy_list:
            self.text_proxy(proxy)


    def text_proxy(self,proxy):
        # 测试开放代理
        proxies = {
            'http': '{}'.format(proxy),
            'https': '{}'.format(proxy)
        }
        try:
            res = requests.get(url=self.test_url,proxies=proxies,headers=self.headers,timeout=2)
            if res.status_code == 200:
                print(proxy,'能用')
        except Exception as e:
            print(proxy,'不能用')


    def main(self):
        self.get_proxy()


if __name__ == '__main__':
    spider = Proxy()
    spider.main()

二、图形验证码(有两种)

前言:

在爬虫中图形验证码的解决方式有哪些?
1 可以通过算法 以及深度学习
2 selenium来解决
3 打码平台(付费)
4 tesseract(免费的 开源的 光学文字识别库)
2.1简单数字加字母类型

https://passport.lagou.com/vcode/create?from=register&refresh=1513081451891
(验证码库,刷新就行)

tesseract
1 安装
1.1 需要把安装的路径添加到path环境变量里面 E:\Tesseract-OCR
1.2 需要把训练数据添加到 用户变量
TESSDATA_PREFIX=E:\Tesseract-OCR\tessdata
​
2 安装模块(pycharm中)
pip install pytesseract
​
3 使用

源代码:

from urllib import request
import pytesseract
from PIL import Image # 图形处理库(图片的保存等)
# 指定tesseract的执行路径
pytesseract.pytesseract.tesseract_cmd = r'F:\python辅助工具\Tesseract-OCR\tesseract.exe'
# 指定训练数据的路径
tessdata_dir_config = r'--tessdata-dir "F:\python辅助工具\Tesseract-OCR\tessdata"'
#以上两条是固定的
url = 'https://passport.lagou.com/vcode/create?from=register&refresh=1513081451891'
request.urlretrieve(url,'text.png')
image = Image.open('text.png')
# print(image,type(image)) #<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=113x46 at 0x1DF18354E48> <class 'PIL.JpegImagePlugin.JpegImageFile'>
result = pytesseract.image_to_string(image, lang='eng',  config=tessdata_dir_config)#lang='eng'是语言  config=tessdata_dir_config是配置
print(result)

注意:

  • tessdata里数据越多,精度越高
  • 本质:pic–>文本
2.2复杂(图片,等)

类似这样(典型的是12306登录)
在这里插入图片描述

打码平台

也需要自己找,这里推荐 超级鹰
超级鹰官方网站:http://www.chaojiying.com
超级鹰镜像网站:http://www.chaojiying.cn

超级鹰的打码平台 https://www.chaojiying.com/1 注册账号(用户)
2 充值(1块钱或者扫码关注微信公众号 1000题分)
3 创建软件id(点击创建软件id  输入名字 提交)
4 下载实例代码(python  点击下载 压缩文件),查看价格体系
5 使用实例代码

源代码:

#!/usr/bin/env python
# coding:utf-8

import requests
from hashlib import md5

class Chaojiying_Client(object):


    def __init__(self, username, password, soft_id):
        self.username = username
        password =  password.encode('utf8')
        self.password = md5(password).hexdigest()
        self.soft_id = soft_id
        self.base_params = {
            'user': self.username,
            'pass2': self.password,
            'softid': self.soft_id,
        }
        self.headers = {
            'Connection': 'Keep-Alive',
            'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
        }

    def PostPic(self, im, codetype):
        """
        im: 图片字节
        codetype: 题目类型 参考 http://www.chaojiying.com/price.html
        """
        params = {
            'codetype': codetype,
        }
        params.update(self.base_params)
        files = {'userfile': ('ccc.jpg', im)}
        r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)
        return r.json()

    def ReportError(self, im_id):
        """
        im_id:报错题目的图片ID
        """
        params = {
            'id': im_id,
        }
        params.update(self.base_params)
        r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
        return r.json()

#以上都不要改,只要改下面的
if __name__ == '__main__':
    chaojiying = Chaojiying_Client('Jerry1234', '123456', '914400')	#username, password, soft_id
    im = open('code2.png', 'rb').read()		#字节流				#本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
    print(chaojiying.PostPic(im, 9004)) 	 #9004 验证码类型  官方网站>>价格体系


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笔记本IT

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值