最近,在網上爬取一些信息需要使用代理,但是自己找代理比較麻煩,所以就想著建一個自己的代理池。而Python是一個自動化和網絡爬蟲的利器,相信很多人都有類似的需求,下面就來介紹一下如何使用Python建立一個代理池。
1. 開始前,需要有一個代理IP地址的網址,這里提供一個免費的網址:https://www.xicidaili.com/
2. 先引入所需的Python庫
import requests
from lxml import etree
import random
import time
3. 設置一個常量代理地址池的長度
pool_len = 20
4. 把獲取到的代理地址封裝成函數
def get_proxies():
url = 'https://www.xicidaili.com/nn/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
res = requests.get(url, headers=headers)
html = etree.HTML(res.text)
all_proxies = html.xpath('//tr[@class="odd" or @class=""]/td[2]/text()')
all_ports = html.xpath('//tr[@class="odd" or @class=""]/td[3]/text()')
proxies = []
for i in range(len(all_proxies)):
proxies.append(all_proxies[i]+':'+all_ports[i])
return proxies
5. 再封裝一個函數獲取有效的代理地址并存入代理池中
def get_valid_proxies():
valid_ips = []
while len(valid_ips)< pool_len:
proxies = get_proxies()
for i in proxies:
try:
requests.get('http://icanhazip.com/', proxies={'http':i,'https':i},timeout=3)
valid_ips.append(i)
except:
pass
time.sleep(5)
return valid_ips
6. 最后測試代理池
ips = get_valid_proxies()
print(ips)
for i in range(10):
url = 'http://icanhazip.com/'
proxy = {'http': random.choice(ips)}
print('第{}次測試,使用代理:{}'.format(i+1,proxy))
print('獲取到的IP地址為:')
print(requests.get(url,proxies=proxy).text.strip())
這樣就完成了一個簡單的代理池,我們可以將獲取到的有效的代理地址存入到文件中,以備下次使用。