今天帶大家使用爬蟲來獲取免費的ip。
1. 打開網站首頁,可以看到總共有十頁數據,總共100條ip記錄。咱們的目的很簡單,就是要這100條ip和對應端口號。完了我們再去篩選那些ip是可用的。
http://www.ip3366.NET/?stype=1&page=1
2. 我們打開瀏覽器模式模式分析頁面看到這些ip信息都位于tr標簽內,所以我么可以使用xpath來獲取這些信息。
#獲取當前頁面10個ip數據
ips = selector.xpath('//*[@id="list"]/table/tbody/tr')
print(len(ips))
'''
10
'''
3. 獲取到當前頁面所有ip信息之后我們就可以使用for循環獲取tr標簽內部具體的ip和端口號。
# 獲取端口和IP
for ip in ips:
ip_num = ip.xpath('td[1]/text()').get() # ip
port_num = ip.xpath('td[2]/text()').get() # port
print(ip_num, port_num)
'''
49.70.151.180 3256
49.87.44.221 9999
42.177.142.239 9999
42.177.141.141 9999
42.176.134.43 9999
42.176.134.212 9999
49.71.142.114 9999
49.87.221.46 9999
49.87.221.120 9999
49.87.221.61 9999
'''
4. 接下來就使用for循環獲取十個頁面的100條數據。
for page in range(1, 10+1):
print(f'-------正在爬取第{page}頁數據-------')
url = f'http://www.ip3366.net/?stype=1&page={page}'
5. 測試可用性,現在所有的ip都已經獲取到了,能不能用還是未知數,所以我們試著有這些ip登陸一下百度頁面,檢測其可用性。
for ip in ip_list:
try:
response = requests.get(url='https://www.baidu.com', proxies=ip, timeout=2)
if response.status_code == 200:
use_proxy.Append(ip)
except Exception as e:
print(f'當前為第{count}個代理ip:', ip, '請求超時, 檢測不合格!!!')
else:
print(f'當前為第{count}個代理ip:', ip, '檢測通過')
檢測結果如下:
因為這些代理每小時都在更新,所以沒事多跑兩遍程序,總會獲取到你想的ip的。