一次免費代理ip的爬取實戰

我們在使用爬蟲的時候,會對代理ip有一定程度的需求。今天爬取的這個免費代理網站不是大家已經爬爛的西刺和66等代理網站,是我無意間發現的寶藏網站~

這個網站還是有一點小意思的。

注意到沒有,這裏的ip地址被換成了圖片,而這個圖片長得似乎和驗證碼非常相似。定位ip地址元素髮現,確實是圖片,並且是base64編碼的形式。

這樣我們就有了整體的思路,首先爬取網頁上圖片的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)

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<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,再驗證有效性之後便可投入使用啦~

——END——

推薦閱讀

用Python來擲個色子~

用Python獲取可能是全網最全的傑尼龜表情包(第三彈)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章