建立屬于自己的代理IP池
python : 免費代理IP獲取,驗證可用性,建立屬于自己的代理ip池

在進行爬蟲爬取網(wǎng)站時候總會面臨著各種各樣的反爬措施,最讓人頭疼的一般就是封IP地址了,這時候使用代理IP就是一個明智的選擇了。
建立屬于自己的代理IP池是進行爬蟲的一個很高效的辦法。
網(wǎng)上存在著大量的免費代理IP網(wǎng)站,以下選取一個較為好用的代理IP網(wǎng)站進行爬取,建立屬于自己的代理IP池。(西祠代理、快代理等等)
代碼如下(獲取西祠代理的可用高匿代理IP)
import requests,parsel,telnetlib
from fake_useragent import UserAgent
ua = UserAgent()
# 高匿代理網(wǎng)址 可以自行更換其他西祠代理網(wǎng)頁內(nèi)部
header = {"User-Agent":ua.random}
# 運行結(jié)果保存在代理txt文件中
url = "https://www.xicidaili.com/nn/"
seeeion = requests.session()
# 提取網(wǎng)頁源代碼
def request(url):
? ? res = seeeion.get(url, headers=header)
? ? html = parsel.Selector(res.text)
? ? return html
# def test()
# 提取網(wǎng)頁數(shù)據(jù)
def extract(html):
? ? # 提取ID列表以及URL列表
? ? id_list = html.xpath('//tr/td[2]/text()').extract()
? ? post_list = html.xpath('//tr[@class]/td[3]/text()').extract()
? ? print(len(id_list))
? ? for id, post in zip(id_list, post_list):
? ? ? ? try:
? ? ? ? ? ? telnetlib.Telnet(id, post, timeout=5)
? ? ? ? ? ? ip = id + ":" + post
? ? ? ? ? ? print("通過第一關:",ip)
? ? ? ? ? ? url = 'https://www.baidu.com'
? ? ? ? ? ? response = requests.get(url,timeout=5, proxies={"https":ip})
? ? ? ? ? ? if (response.status_code == 200):
? ? ? ? ? ? ? ? print("通過第二關:",ip,"=================")
? ? ? ? ? ? ? ? with open('F:\Python文件\代理IP\代理.txt', "a") as fp:
? ? ? ? ? ? ? ? ? ? fp.write(ip + "\n")
? ? ? ? ? ? ? ? # print("header : ", response.text)
? ? ? ? except Exception as e:
? ? ? ? ? ? pass
? ? ? ? ? ? # print(e, '不可用')
? ? ? ? # 在這里添加一個函數(shù)進行對IP檢測,是否可用
? ? print("完成")
try:
? ? # 提取總頁數(shù)
? ? html = request(url)
? ? page = html.xpath('//div[@class="pagination"]/a[10]/text()').extract_first()
? ? page = int(page)
? ? extract(html)
? ? # 分頁抓取
? ? for i in list(range(2,4)):? ? # 逐頁發(fā)起請求? (page+1)
? ? ? ? url1 = url + str(i)
? ? ? ? html = request(url1)
? ? ? ? extract(html)
except:
? ? print("出現(xiàn)bug,請修改")