2017-4-30爬取代理IP并驗(yàn)證

之前有一次被豆瓣封IP了,就想著自己構(gòu)建一些IP加UA.今天參考了這篇文章爬蟲(2)--- 構(gòu)建簡單代理IP池先簡單的爬取了一些免費(fèi)代理IP并驗(yàn)證了下可用性.

選擇的是西刺免費(fèi)代理IP
西刺代理.png
  • 分析頁面寫一個(gè)抓取地址和端口的re
pattern = '(\d+\.\d+\.\d+\.\d+)</td>\s*<td>(\d+)'

把IP格式整理好寫進(jìn)列表

re_list = re.findall(pattern, html)
    ip_list = []
    for ip in re_list:
        ip = ip[0] + ':' + ip[1]
        ip_list.append(ip)
    return ip_list
  • 逐個(gè)驗(yàn)證這些IP的可用性
proxies = {
        "http": ip,
    }
    try:
        res = requests.get(tar_url, proxies=proxies, headers=headers, timeout=5)
        if res.status_code == 200:
            tmp_proxies.append(ip)
            return ip
        else:
            res.raise_for_status()  # 如果響應(yīng)狀態(tài)碼不是200,主動(dòng)拋出異常
    except requests.RequestException as e:
        print("驗(yàn)證代理IP" + ip + "時(shí)發(fā)生如下錯(cuò)誤 :")
        print(e)

剛開始我也是選的baidu.com來驗(yàn)證是否可用的,程序跑完50個(gè)IP竟然全部作為可用IP返回,抱著這么好的事情怎么會(huì)發(fā)生在我身上的心態(tài),換了一個(gè)url重新測(cè)一遍,有15個(gè)能用,通過率大概30%,這才對(duì)嘛.


  • 最后寫個(gè)函數(shù)封裝一下,全部代碼如下.很簡陋,待日后完善,準(zhǔn)備的思路是一個(gè)IP固定搭配一個(gè)UA,這樣才像一個(gè)用戶嘛.
#! usr/bin/env python3
# -*- coding:utf-8 -*-


import requests
import re
import random


url = 'http://www.xicidaili.com/nn'
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.3'
                         '6 (KHTML, like Gecko) Ubuntu Chromium/56.0.2924.7'
                         '6 Chrome/56.0.2924.76 Safari/537.36'}


def get_user_agent():
    '''
    功能: 隨機(jī)獲取UA
    :return: 返回一個(gè)隨機(jī)UA
    '''
    user_agents=[
        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
        "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
        "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
        "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
        "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
        "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
        "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
        "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
        "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
        "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
        "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",
        "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
        "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER",
        "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; LBBROWSER)",
        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E; LBBROWSER)",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 LBBROWSER",
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
        "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; QQBrowser/7.0.3698.400)",
        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; 360SE)",
        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
        "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
        "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",
        "Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
        "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b13pre) Gecko/20110307 Firefox/4.0b13pre",
        "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11",
        "Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10"
    ]
    user_agent = random.choice(user_agents)
    return user_agent


def get_proxies():
    '''
    功能: 爬取西刺高匿IP
    :return: IP列表
    '''
    html = requests.get(url=url, headers=headers).text
    pattern = '(\d+\.\d+\.\d+\.\d+)</td>\s*<td>(\d+)'
    re_list = re.findall(pattern, html)
    ip_list = []
    for ip in re_list:
        ip = ip[0] + ':' + ip[1]
        ip_list.append(ip)
    return ip_list

def test_proxy(ip):
    '''
    功能: 利用百度逐個(gè)驗(yàn)證IP的有效性
    :param ip: 當(dāng)前被驗(yàn)證的IP
    :return: 
    '''
    tar_url = "http://www.tjcu.edu.cn/"
    user_agent = get_user_agent()
    headers = {
        'User-Agent': user_agent
    }
    proxies = {
        "http": ip,
    }
    try:
        res = requests.get(tar_url, proxies=proxies, headers=headers, timeout=5)
        if res.status_code == 200:
            tmp_proxies.append(ip)
            return ip
        else:
            res.raise_for_status()  # 如果響應(yīng)狀態(tài)碼不是200,主動(dòng)拋出異常
    except requests.RequestException as e:
        print("驗(yàn)證代理IP" + ip + "時(shí)發(fā)生如下錯(cuò)誤 :")
        print(e)


if __name__ == '__main__':
    init_proxies = get_proxies()  # 獲取原始代理IP
    tmp_proxies = []
    for i in init_proxies:
        tmp_proxy = test_proxy(i)  # 逐個(gè)驗(yàn)證
    print(tmp_proxies)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蛹找,一起剝皮案震驚了整個(gè)濱河市鹃彻,隨后出現(xiàn)的幾起案子咧虎,更是在濱河造成了極大的恐慌,老刑警劉巖毛肋,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異屋剑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)诗眨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門唉匾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人匠楚,你說我怎么就攤上這事巍膘。” “怎么了芋簿?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵峡懈,是天一觀的道長。 經(jīng)常有香客問我与斤,道長肪康,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任撩穿,我火速辦了婚禮磷支,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘食寡。我一直安慰自己雾狈,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布抵皱。 她就那樣靜靜地躺著善榛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪呻畸。 梳的紋絲不亂的頭發(fā)上移盆,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天,我揣著相機(jī)與錄音伤为,去河邊找鬼味滞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛钮呀,可吹牛的內(nèi)容都是我干的剑鞍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼爽醋,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蚁署!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蚂四,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤光戈,失蹤者是張志新(化名)和其女友劉穎哪痰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體久妆,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡晌杰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了筷弦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肋演。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖烂琴,靈堂內(nèi)的尸體忽然破棺而出爹殊,到底是詐尸還是另有隱情,我是刑警寧澤奸绷,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布梗夸,位于F島的核電站,受9級(jí)特大地震影響号醉,放射性物質(zhì)發(fā)生泄漏反症。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一畔派、第九天 我趴在偏房一處隱蔽的房頂上張望惰帽。 院中可真熱鬧,春花似錦父虑、人聲如沸该酗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呜魄。三九已至,卻和暖如春莱衩,著一層夾襖步出監(jiān)牢的瞬間爵嗅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國打工笨蚁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留睹晒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓括细,卻偏偏與公主長得像伪很,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子奋单,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容