爬蟲日記-采集 快代理 免費(fèi) 代理ip 并 清洗 ip


title: 爬蟲日記-采集 快代理 免費(fèi) 代理ip 并 清洗 ip
tags: ['requests','python','lxml','代理ip','proxy']
date: 2021-12-08
categories: "磨刀不誤砍柴工"



環(huán)境
window10
python3
使用到的庫
requests    網(wǎng)絡(luò)請(qǐng)求
lxml        網(wǎng)頁源碼解析

源碼地址

[TOC]

摘要

寫爬蟲被封ip是很正常的,所以代理ip也是爬蟲生活必不可少的一部分溉贿,今天寫一個(gè)網(wǎng)絡(luò)上公開的免費(fèi)的代理ip帆吻。

首先理一下邏輯祭芦,我要先寫一個(gè)爬蟲,去把網(wǎng)站上的公開的代理ip給采集過來,然后保險(xiǎn)起見蒂窒,對(duì)數(shù)據(jù)進(jìn)行一定的清洗,獲得可以使用的ip荞怒。

ok洒琢,開始寫爬蟲。

1 采集代理ip

1.1 觀察目標(biāo)網(wǎng)頁

快代理免費(fèi)ip展示的數(shù)據(jù)如下:

1638949700(1).jpg

而我們程序進(jìn)行網(wǎng)絡(luò)訪問所需要的部分為ip 褐桌、port 衰抑、類型,舉個(gè)例子:

url = "https://www.baidu.com"
proxies = {'http': "http://111.231.86.149:7890"}
requests.get(href, proxies=proxies)

所以我們要采集的就是每個(gè)代理ip的ipport荧嵌、類型呛踊。

1.2 采集

爬蟲很簡單,直接上代碼啦撮。

# 目標(biāo)網(wǎng)址
url = "https://www.kuaidaili.com/free/"
payload = {}
# 構(gòu)造請(qǐng)求頭
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
    'Accept': 'application/json, text/javascript, */*; q=0.01',
}
# 獲取網(wǎng)頁源碼
response = requests.request("GET", url, headers=headers, data=payload)
# 存放結(jié)果的列表
res = []
_ = etree.HTML(response.text)
# 格式化代理的中間變量
type_dct = {
    "HTTP": "http://",
    "HTTPS": "https://"
}
data_list = _.xpath("http://tbody/tr")
for data in data_list:
    # 獲取ip
    ip = data.xpath("./td[1]/text()")[0]
    port = data.xpath("./td[2]/text()")[0]
    type = data.xpath("./td[4]/text()")[0]
    # 存到結(jié)果中
    res.append(type_dct[type] + ip + ':' + port)
print(res)

2 清洗代理

2.1 目的及原理

畢竟是網(wǎng)絡(luò)上公開的數(shù)據(jù)谭网,要是百分百好用的話,那為什么還要有付費(fèi)的代理呢赃春。

直接獲取到的代理一般會(huì)有一定的時(shí)效愉择,真假的缺陷,直接放進(jìn)項(xiàng)目中去用的話织中,效率可能堪憂锥涕,所以在使用之前,最好對(duì)獲取到的代理進(jìn)行一定的清洗狭吼,獲取暫時(shí)有效的代理层坠。

清洗的方法也很簡單,就是檢測這個(gè)代理是否有效搏嗡。

我們可以構(gòu)造一個(gè)請(qǐng)求窿春,用這個(gè)代理去進(jìn)行訪問拉一,如果能訪問的到,拿得到數(shù)據(jù)旧乞,那這個(gè)代理暫時(shí)是有效的蔚润,可以放到項(xiàng)目中去使用,如果直接404或者其他的一些問題出現(xiàn)尺栖,那這個(gè)代理可能已經(jīng)壞了嫡纠,或者質(zhì)量不行,就直接放棄延赌。

2.2 清洗ip的代碼


if 'https' in proxy:
    proxies = {'https': proxy}
    else:
        proxies = {'http': proxy}
        headers = {
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4396.0 Safari/537.36'
        }
        try:
            r = requests.get(href, proxies=proxies, timeout=5, headers=headers)
            if r.status_code == 200:
                print "代理有效"
            except:
                print "代理失效"

3 完善代碼

import requests
from lxml import etree


# 獲取快代理首頁的代理
def get_proxy_list():
    url = "https://www.kuaidaili.com/free/"
    payload = {}
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
        'Accept': 'application/json, text/javascript, */*; q=0.01',
    }
    response = requests.request("GET", url, headers=headers, data=payload)
    res = []
    _ = etree.HTML(response.text)
    type_dct = {
        "HTTP": "http://",
        "HTTPS": "https://"
    }
    data_list = _.xpath("http://tbody/tr")
    for data in data_list:
        ip = data.xpath("./td[1]/text()")[0]
        port = data.xpath("./td[2]/text()")[0]
        type = data.xpath("./td[4]/text()")[0]
        res.append(type_dct[type] + ip + ':' + port)
    return res


# 測試代理
def check(proxy):
    
    if 'https' in proxy:
        proxies = {'https': proxy}
    else:
        proxies = {'http': proxy}
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4396.0 Safari/537.36'
    }
    try:
        r = requests.get(href, proxies=proxies, timeout=5, headers=headers)
        if r.status_code == 200:
            return True
    except:
        return False


if __name__ == '__main__':
    proxy_list = get_proxy_list()
    print(proxy_list)
    for p in proxy_list:
        print(p, check(p))

寫在最后

代碼并不完善除盏,直接應(yīng)用到像樣的項(xiàng)目上還是不行的,也沒有做一些奇怪操作挫以、情況的處理者蠕,只是提供一個(gè)思路和一個(gè)demo。

實(shí)力有限掐松,才疏學(xué)淺踱侣,如有錯(cuò)誤,歡迎指正大磺。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末抡句,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子杠愧,更是在濱河造成了極大的恐慌待榔,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件流济,死亡現(xiàn)場離奇詭異锐锣,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)袭灯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門刺下,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绑嘹,“玉大人稽荧,你說我怎么就攤上這事」ひ福” “怎么了姨丈?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長擅腰。 經(jīng)常有香客問我蟋恬,道長,這世上最難降的妖魔是什么趁冈? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任歼争,我火速辦了婚禮拜马,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘沐绒。我一直安慰自己俩莽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布乔遮。 她就那樣靜靜地躺著扮超,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蹋肮。 梳的紋絲不亂的頭發(fā)上出刷,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音坯辩,去河邊找鬼馁龟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛漆魔,可吹牛的內(nèi)容都是我干的屁柏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼有送,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼淌喻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起雀摘,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤裸删,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后阵赠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涯塔,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年清蚀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了匕荸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡枷邪,死狀恐怖榛搔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情东揣,我是刑警寧澤践惑,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站嘶卧,受9級(jí)特大地震影響尔觉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜芥吟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一侦铜、第九天 我趴在偏房一處隱蔽的房頂上張望专甩。 院中可真熱鬧,春花似錦钉稍、人聲如沸配深。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽篓叶。三九已至,卻和暖如春羞秤,著一層夾襖步出監(jiān)牢的瞬間缸托,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國打工瘾蛋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留俐镐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓哺哼,卻偏偏與公主長得像佩抹,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子取董,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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