前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一次免费代理ip的爬取实战

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

作者头像
老肥码码码
发布2020-04-26 12:59:30
7850
发布2020-04-26 12:59:30
举报

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

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

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

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

爬取网页

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

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

代码语言:javascript
复制
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将图片的长宽均增至三倍,这样识别得到的结果便有模有样了。

代码语言:javascript
复制
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,再验证有效性之后便可投入使用啦~

代码语言:javascript
复制
——END——
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与数据之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 爬取网页
  • OCR识别
相关产品与服务
文字识别
文字识别(Optical Character Recognition,OCR)基于腾讯优图实验室的深度学习技术,将图片上的文字内容,智能识别成为可编辑的文本。OCR 支持身份证、名片等卡证类和票据类的印刷体识别,也支持运单等手写体识别,支持提供定制化服务,可以有效地代替人工录入信息。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档