欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

python 自建代理池

方一強2年前8瀏覽0評論

Python自建代理池是非常有必要的,因為現今的互聯網環境下,使用代理可以有效的解決一些網絡訪問的問題,比如訪問一些需要實名認證、需要解禁或者受到封鎖的網站等。本文將介紹Python自建代理池的實現方法。

Python自建代理池可以通過網上免費的代理IP資源進行搜集,比如“西刺代理”、“89免費代理”等網站上的IP地址可以進行如下爬取。

import requests
from lxml import etree
def get_proxy():
headers = {
'User-Agent': 'User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36'
}
url = 'http://www.xicidaili.com/nn/'
response = requests.get(url=url, headers=headers)
html = etree.HTML(response.text)
proxies = html.xpath('//tr[@class="odd"]//td[2]/text()')
ports = html.xpath('//tr[@class="odd"]//td[3]/text()')
proxies_list = [proxy + ':' + port for proxy, port in zip(proxies, ports)]
return proxies_list

以上代碼通過利用requests和lxml庫來發送請求,并獲取代理IP地址,如果需要獲得更多的IP地址,可以將url改成其他的網站鏈接,達到不同的效果。

獲取到代理IP之后,需要對IP地址進行驗證,否則將無法使用,可以利用以下代碼對代理IP進行篩選。

import requests
def check_proxy(proxies_list):
available_proxies = []
url = "http://icanhazip.com"
for proxy in proxies_list:
try:
proxy_dict = {'http': 'http://' + proxy, 'https': 'https://' + proxy}
response = requests.get(url=url, proxies=proxy_dict, timeout=3)
if response.status_code == 200:
available_proxies.append(proxy)
except Exception as e:
print(e)
return available_proxies

以上代碼將每個代理IP使用requests庫發送請求,如果連接成功就代表該IP地址能夠使用,可以將該地址存到available_proxies數組中。

最后,我們將所有可用的代理IP存到本地文件,并在需要使用代理的時候進行加載即可。

import random
def save_proxies(proxies_list):
with open('proxies.txt', 'w') as f:
f.write('\n'.join(proxies_list))
def load_proxies():
with open('proxies.txt', 'r') as f:
proxies_list = f.read().split('\n')
return proxies_list
if __name__ == '__main__':
proxies_list = get_proxy()
available_proxies = check_proxy(proxies_list)
save_proxies(available_proxies)
proxies = load_proxies()
proxy_dict = {'http': 'http://' + random.choice(proxies), 'https': 'https://' + random.choice(proxies)}

以上代碼可以將可用的代理IP存儲到本地文件,下次使用時只需要讀取即可,將隨機抽取的IP地址使用proxy_dict字典即可實現代理IP的使用。

通過以上的方法,不僅可以提高爬蟲的性能,而且可以避免因為IP地址被封鎖而無法進行正常的數據爬取。