一次免费代理ip的爬取实战

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

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

一次免费代理ip的爬取实战_第1张图片

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

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

爬取网页

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

一次免费代理ip的爬取实战_第2张图片

当我们得到图片的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)

OCR识别

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

但是使用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

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

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

——END——

推荐阅读

用Python来掷个色子~

用Python获取可能是全网最全的杰尼龟表情包(第三弹)

你可能感兴趣的:(一次免费代理ip的爬取实战)