小红书旋转验证码--采集和识别

上一集已经采集过了小红书的安卓端的图库,这一集就是电脑PC端采集浏览器的图库了

小红书有个特点,就是每一两个月就会更新图库,不会一直用一个图库的,如果是想要自己搭建识别模型,就要做好持续更新的准备。

1,开始准备工作,写Python代码去采集小红书验证码的图集


#代码作者:地球 mkk2328,本地识别验证码99%成功率,也可请求api,适合安卓,电脑浏览器,不适合协议,咨询或者购买服务不免费。

#部分代码来自于deta的作者,

import os
import sys
import time
import requests
import random
import base64
from io import BytesIO
from PIL import Image
sys.path.append(os.path.abspath(os.path.dirname(os.path.abspath(os.path.dirname(__file__)))))
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains
 

#下载图片,
def download_by_url(wjj,url):
    # 获取当前文件名作为保存文件夹
    path = os.path.basename(__file__).split('.')[0]
    # 获取 url 中文件名称和扩展名作为保存文件名
    name = url.split('/')[-1]
    # 获取文件扩展名作为文件保存分类
    file_type = name.split('.')[1]
    path += '/' + file_type
    # 判断文件保存路径是否存在,不存在则创建
    dirs = Path(path)
    if not dirs.is_dir():
        os.makedirs(path)

    # 根据文件路径获取文件,如果文件不存在则创建
    # wb: 以二进制格式打开一个文件只用于写入
    file_path = "D:/小红书图片/" + wjj + '/' + name
    file = open(file_path, 'wb')
    try:
        # 通过 url 获取资源
        request = urllib.request.urlopen(url)
        # 将图片二进制数据写入文件
        file.write(request.read())
        print('文件保存成功!')
    except IOError:
        print('获取资源失败!')
    # 关闭文件
    file.close()


# PIL图片保存为base64编码
def PIL_base64(img, coding='utf-8'):
    img_format = img.format
    if img_format == None:
        img_format = 'JPEG'
 
    format_str = 'JPEG'
    if 'png' == img_format.lower():
        format_str = 'PNG'
    if 'gif' == img_format.lower():
        format_str = 'gif'
 
    if img.mode == "P":
        img = img.convert('RGB')
    if img.mode == "RGBA":
        format_str = 'PNG'
        img_format = 'PNG'
 
    output_buffer = BytesIO()
    # img.save(output_buffer, format=format_str)
    img.save(output_buffer, quality=100, format=format_str)
    byte_data = output_buffer.getvalue()
    base64_str = 'data:image/' + img_format.lower() + ';base64,' + base64.b64encode(byte_data).decode(coding)
 
    return base64_str
 

#浏览器途径 
driver = webdriver.Chrome('D:\\chromedriver-win64\\chromedriver.exe')


driver.get(
    'https://www.xiaohongshu.com/website-login/captcha?redirectPath=https%3A%2F%2Fwww.xiaohongshu.com%2Fexplore&verifyUuid=shield-4f9bcc31-0bc0-462a-843a-e60239713e46&verifyType=101&verifyBiz=461')


time.sleep(3)

for i in range(10):
    # 等待【旋转图像】元素出现
    WebDriverWait(driver, 5).until(lambda x: x.find_element_by_xpath('//div[@id="red-captcha-rotate"]/img'))
    # 找到【旋转图像】元素
    tag1 = driver.find_element_by_xpath('//div[@id="red-captcha-rotate"]/img')
    # 获取图像链接
    img_url = tag1.get_attribute('src').split("com/")[1]
    print(img_url)

    # 等待【旋转图像】元素出现
    WebDriverWait(driver, 5).until(lambda x: x.find_element_by_xpath('//div[@id="red-captcha-rotate-bg"]'))
    # 找到【旋转图像】元素
    tag2 = driver.find_element_by_xpath('//div[@id="red-captcha-rotate-bg"]/img')
    # 获取图像链接
    img_url2 = tag2.get_attribute('src').split("com/")[1]
    print(img_url2)


    write_file_content("D:\\allData.txt",
                       str(img_url) + "----" + str(img_url2), "a")

    download_by_url("center",tag1.get_attribute('src'))
    download_by_url("BG",tag2.get_attribute('src'))

    driver.refresh()
    time.sleep(2.3)
    print("刷新成功 = " + str(i))

只要我们不断去采集,就可以得到数万张图集,然后就开始做标注了,

我们搭建一个服务器,编写代码,标注数据和角度,就是废手

<!DOCTYPE html>
<html>

<body>
    <img src="C:\Users\Bug\Desktop\bg_s708421426.png" alt="描述图像的文本">
    <img src="C:\Users\Bug\Desktop\center_s708438468.png" style="border-radius: 200%; position: absolute; top:0;left: 0;transform: rotate(254deg)">
    
</body>

</html>

rotate()就是数据角度,需要人工调整。然后记录最优的角度数据。

下一集就开始做验证码对接api的教程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值