如何用海外HTTP代理設定python爬蟲代理ip池?

重見光明的貓發表於2022-08-30

很多新手爬蟲都有過這樣的經歷,自己的爬蟲程式一點問題沒有,卻總是抓取不到資訊或抓取了錯誤資訊、亂碼,甚至請求被拒絕,這是因為反爬程式對我們的訪問IP做出了各種限制的原因,使用代理ip軟體能夠很大程度上解決反爬蟲程式的限制問題,特別是ip的限制情況就會少很多,資料抓取的成功機率也會大大提升。

如何用海外HTTP代理設定python爬蟲代理ip池?

那麼我們該如何利用IP代理搭建爬蟲呢?

我們在建立爬蟲ip代理的時候主要是以下關鍵步驟組建

1、從代理ip網站爬取IP地址及埠號並儲存

2、驗證ip是否能用

3、格式化ip地址

4、在requests中使用代理ip爬取網站

值得注意的是在Requests中使用代理爬取的格式是

import requests

requests.get(url, headers=headers,proxies=proxies)

其中proxies是一個字典其格式為:

對每個ip都有

proxies = {

http: ' '

https: ' 114.99.7.122:8752 '

}

注意:

對於http和https兩個元素,這裡的http和https

代表的不是代理網站上在ip後面接的型別

代表的是requests訪問的網站的傳輸型別是http還是https

你爬的網站是http型別的你就用http,如果是https型別的你就用https,在代理網站上爬的時候也要分別爬http或https的ip。

如何用海外HTTP代理設定python爬蟲代理ip池?

下面我們直接上程式碼

1:配置環境、匯入包

# IP地址取自國內髙匿代理IP網站:smartproxy

# 僅僅爬取首頁IP地址就足夠一般使用

from bs4 import BeautifulSoup
import requests
import random
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.194.139.179 Safari/537.36'}


2:獲取網頁內容函式

def getHTMLText(url,proxies):
try:
r = requests.get(url,proxies=proxies)
r.raise_for_status()
r.encoding = r.apparent_encoding
except:
return 0
else:
return r.text


3:從海外HTTP代理網站獲取代理IP列表函式,並檢測可用性

def get_ip_list(url):
web_data = requests.get(url,headers)
soup = BeautifulSoup(web_data.text, 'html')
ips = soup.find_all('tr')
ip_list = []
for i in range(1, len(ips)):
ip_info = ips[i]
tds = ip_info.find_all('td')
ip_list.append(tds[1].text + ':' + tds[2].text)


#檢測ip可用性,移除不可用ip:(這裡其實總會出問題,你移除的ip可能只是暫時不能用,剩下的ip使用一次後可能之後也未必能用)

for ip in ip_list:
try:
proxy_host = "
proxy_temp = {"https": proxy_host}
res = urllib.urlopen(url, proxies=proxy_temp).read()
except Exception as e:
ip_list.remove(ip)
continue
return ip_list


4:從代理IP池中隨機獲取IP列表

def get_random_ip(ip_list):
proxy_list = []
for ip in ip_list:
proxy_list.append(')
proxy_ip = random.choice(proxy_list)
proxies = {'http': proxy_ip}
return proxies


5:呼叫IP代理

if __name__ == '__main__':
url = '
ip_list = get_ip_list(url)
proxies = get_random_ip(ip_list)
print(proxies)


當然使用了代理IP,也不代表可以肆無忌憚的抓取資料,首先違法的事情我們堅決不能幹,使用了代理IP,也要儘可能的遵守反爬蟲規則,減少抓取頻率,避免給對方伺服器造成太大的壓力而打不開。

如何用海外HTTP代理設定python爬蟲代理ip池?

最後提一下我文中用到的IP代理商,Smartproxy是海外HTTP代理伺服器提供商,IP可以精準定位城市級,每個月都會更新IP池,一手IP,服務於大資料採集領域幫助企業/個人快速高效獲取資料來源,真的非常便宜實惠,而已速度快又很穩定。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70021123/viewspace-2912631/,如需轉載,請註明出處,否則將追究法律責任。

相關文章