大家好,我是志斌~
我們所寫的爬蟲,它對伺服器發出的網絡請求頻率要比正常使用者的高的多,進而開發者可以将請求頻率過高的使用者視為爬蟲程式,進而來限制爬蟲程式。
今天志斌就來給大家分享一下,如何用Python搭建一個IP代理池,來破解伺服器通過對使用者請求頻率進行限制的反爬蟲。
一、原理
因為用戶端的IP位址是唯一的,是以開發者便将IP位址作為用戶端的身份辨別。
伺服器可以根據用戶端的IP的通路次數來辨別記錄,進而計算出它的請求頻率。然後,對于請求頻率過高的用戶端進行反爬蟲限制。
二、破解
其實破解請求頻率限制反爬蟲是十分簡單的,因為Requests庫中就有一個proxies參數,就是專門為使用IP來準備的,具體使用方法如下:
import requests
proxies = {
"http": "http://10.10.1.10:3128",
"https": "https://10.10.1.10:1080",
}
requests.get("http://example.org", proxies=proxies)
三、搭建IP代理池
搭建一個IP代理池分為三個子產品,分别是爬取子產品、檢測子產品、存儲子產品。下面讓我們來看看這三個子產品要怎麼寫吧。
- 爬取子產品
我們此次是在百度上搜尋的一個免費的IP代理網站對其代理IP進行爬取。
我們打開開發者模式,然後輸入對網頁進行觀察,我們發現資料存儲在源網頁中。
圖檔
既然我們已經發現資料的存儲位置和存儲形式了,那麼就可以發起請求,提取資料了,代碼如下:
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)
- 檢測子產品
因為我們是爬取的免費的IP,是以我們要對其進行檢測,看看是否失效了,畢竟便宜沒好貨,好貨不便宜麼~ 檢測代碼如下:
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, '檢測通過')
- 存儲子產品
我這裡是将檢測出來可以使用的IP代理存到了csv檔案中去,大家也可以嘗試使用其他類型的存儲,代碼如下:
import csv
with open('ip.csv','a',newline='') as f:
writer = csv.writer(f)
writer.writerow(list)
四、小結
- 本文詳細介紹了如何破解請求頻率限制的反爬蟲,并教大家搭建一個自己的IP代理池。
- 使用代理IP來進行爬蟲是目前一種非常流行的方式,因為每個使用者端的IP是唯一的,一旦被認為是爬蟲給限制或者是封禁了,那麼對于使用者來說會造成很大的損失。
- 免費的IP代理品質不如付費的,如果有大量的需求還是需要購買一下專業的。
- 本文僅供學習參考,不做它用。