高可用免费代理ip爬取实战

Thea ·
更新时间:2024-09-20
· 520 次阅读

我们在使用爬虫的时候,会对代理ip有一定程度的需求。今天爬取的这个免费代理网站不是大家已经爬烂的西刺和66等代理网站,是我无意间发现的~

这个网站还是有一点意思的。

file

注意到没有,这里的ip地址被换成了图片,而这个图片长得似乎和验证码非常相似。定位ip地址元素发现,确实是图片,并且是base64编码的形式。

file

这样我们就有了整体的思路,首先爬取网页上图片的base64编码,将编码解码保存为图片,接着利用OCR进行识别,将图片中的ip提取。

爬取网页

网页上的这些元素爬取还是非常容易的,通过page参数控制翻页,其他内容例如端口号,匿名度等代理的信息可以利用xpath或者其他方式来解析网页得到。

当我们得到图片的base64之后,需要将编码解码并保存为图片。

def ip_img(img_base64,i): img_data=base64.b64decode(img_base64) with open ('ip/{}.jpg'.format(i),'wb') as f: f.write(img_data)

file

OCR识别

我们将这些ip地址的图片统一保存在ip文件夹内,来对每一张图片进行OCR识别,识别的套路很简单,和知网的验证码的方式相同,我们先把图片转换为灰度图片,再进行简单的二值化处理,得到新图片效果如下所示。

file

但是使用tesserocr之后发现,这个黑白的二值图片依然不能识别,我猜想是因为图片大小的问题,于是我利用resize将图片的长宽均增至三倍,这样识别得到的结果便有模有样了。

def ocr_ip(img): image=Image.open(img) image=image.resize((450,60)) image=image.convert('L') threshold=127 table=[] for i in range(256): if i<threshold: table.append(0) else: table.append(1) image=image.point(table,'1') result=tesserocr.image_to_text(image).replace('§','5').replace('$','8').replace('L','1').replace('i','1').replace(',','') return result.replace('\n','')

上面还是进行了一些小小的处理,例如tesserocr会把“5”识别为“§”,把“1”识别为“L”等等,因此我使用replace做了结果的部分内容替换。

这样,我们就可以获取这样一些免费的代理IP,再验证有效性之后便可投入使用啦~


作者:librauee



高可用 代理ip 代理 ip 实战

需要 登录 后方可回复, 如果你还没有账号请 注册新账号