上一集已经采集过了小红书的安卓端的图库,这一集就是电脑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的教程。