手把手教你用Python搭建IP代理池,輕松破解請(qǐng)求頻率限制反爬蟲~
回復(fù)“書籍”即可獲贈(zèng)Python從入門到進(jìn)階共10本電子書
大家好,我是志斌~
我們所寫的爬蟲,它對(duì)服務(wù)器發(fā)出的網(wǎng)絡(luò)請(qǐng)求頻率要比正常用戶的高的多,從而開發(fā)者可以將請(qǐng)求頻率過(guò)高的用戶視為爬蟲程序,從而來(lái)限制爬蟲程序。
今天志斌就來(lái)給大家分享一下,如何用Python搭建一個(gè)IP代理池,來(lái)破解服務(wù)器通過(guò)對(duì)用戶請(qǐng)求頻率進(jìn)行限制的反爬蟲。
01
原理
因?yàn)榭蛻舳说腎P地址是唯一的,所以開發(fā)者便將IP地址作為客戶端的身份標(biāo)識(shí)。
服務(wù)器可以根據(jù)客戶端的IP的訪問(wèn)次數(shù)來(lái)標(biāo)識(shí)記錄,從而計(jì)算出它的請(qǐng)求頻率。然后,對(duì)于請(qǐng)求頻率過(guò)高的客戶端進(jìn)行反爬蟲限制。
02
破解
其實(shí)破解請(qǐng)求頻率限制反爬蟲是十分簡(jiǎn)單的,因?yàn)镽equests庫(kù)中就有一個(gè)proxies參數(shù),就是專門為使用IP來(lái)準(zhǔn)備的,具體使用方法如下:
import requests
proxies = {
"http": "http://10.10.1.10:3128",
"https": "https://10.10.1.10:1080",
}
requests.get("http://example.org", proxies=proxies)
03
搭建IP代理池
搭建一個(gè)IP代理池分為三個(gè)模塊,分別是爬取模塊、檢測(cè)模塊、存儲(chǔ)模塊。下面讓我們來(lái)看看這三個(gè)模塊要怎么寫吧。
01
爬取模塊
我們此次是在百度上搜索的一個(gè)免費(fèi)的IP代理網(wǎng)站對(duì)其代理IP進(jìn)行爬取。
我們打開開發(fā)者模式,然后輸入對(duì)網(wǎng)頁(yè)進(jìn)行觀察,我們發(fā)現(xiàn)數(shù)據(jù)存儲(chǔ)在源網(wǎng)頁(yè)中。

既然我們已經(jīng)發(fā)現(xiàn)數(shù)據(jù)的存儲(chǔ)位置和存儲(chǔ)形式了,那么就可以發(fā)起請(qǐng)求,提取數(shù)據(jù)了,代碼如下:
import requests
import re
headers = {
'Connection': 'keep-alive',
'sec-ch-ua': '"Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"',
'sec-ch-ua-mobile': '?0',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-User': '?1',
'Sec-Fetch-Dest': 'document',
'Referer': 'https://www.kuaidaili.com/free/inha/1/',
'Accept-Language': 'zh-CN,zh;q=0.9',
}
for page in range(1,50):
response = requests.get(f'https://www.kuaidaili.com/free/inha/{page}/', headers=headers, cookies=cookies)
ip_list = re.findall('data-title="IP">(.*?)</td>',response.text)
02
檢測(cè)模塊
因?yàn)槲覀兪桥廊〉拿赓M(fèi)的IP,所以我們要對(duì)其進(jìn)行檢測(cè),看看是否失效了,畢竟便宜沒好貨,好貨不便宜么~ 檢測(cè)代碼如下:
list = []
for ip in ip_list:
try:
response = requests.get('https://www.baidu.com', proxies=ip, timeout=2)
if response.status_code == 200:
list.append(ip)
except:
pass
else:
print(ip, '檢測(cè)通過(guò)')
03
存儲(chǔ)模塊
我這里是將檢測(cè)出來(lái)可以使用的IP代理存到了csv文件中去,大家也可以嘗試使用其他類型的存儲(chǔ),代碼如下:
import csv
with open('ip.csv','a',newline='') as f:
writer = csv.writer(f)
writer.writerow(list)
03
小結(jié)
1. 本文詳細(xì)介紹了如何破解請(qǐng)求頻率限制的反爬蟲,并教大家搭建一個(gè)自己的IP代理池。
2. 使用代理IP來(lái)進(jìn)行爬蟲是當(dāng)前一種非常流行的方式,因?yàn)槊總€(gè)用戶端的IP是唯一的,一旦被認(rèn)為是爬蟲給限制或者是封禁了,那么對(duì)于用戶來(lái)說(shuō)會(huì)造成很大的損失。
3. 免費(fèi)的IP代理質(zhì)量不如付費(fèi)的,如果有大量的需求還是需要購(gòu)買一下專業(yè)的。
4. 本文僅供學(xué)習(xí)參考,不做它用。
小伙伴們,快快用實(shí)踐一下吧!如果在學(xué)習(xí)過(guò)程中,有遇到任何問(wèn)題,歡迎加我好友,我拉你進(jìn)Python學(xué)習(xí)交流群共同探討學(xué)習(xí)。
------------------- End -------------------
往期精彩文章推薦:

歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Python學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群】
萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行
/今日留言主題/
隨便說(shuō)一兩句吧~~
