Python爬取国外可用的代理IP
这是作者曾经在某个程序中写的一个python模块,其作用是爬取国外的一个免费代理IP网站,获得免费的代理IP。这个模块需要科学上网才能使用。
模块只解析了网页的 ip及其端口,其实还有很多关于代理IP的其他数据,比如IP的国家,访问延时,是否支持HTTPS等。有兴趣可自行研究。
使用了BeautifulSoup4 以及 requests 库。
完整代码如下:
from bs4 import BeautifulSoup as bs
import requests as _r
import random
PROXY_UPDATE_QUANTITY = 80
PROXY_WEB_API = 'https://free-proxy-list.net'
class proxies:
def __init__(self,metux=None):
self.proxies = []
self.metux = metux
def update(self):
try:
resp = _r.get(PROXY_WEB_API)
html = resp.text
except Exception as err:
print(err)
print('IP表更新失败')
return 0
soup = bs(html,'html.parser')
table = soup.find('table')
tmp_proxies = []
c = 0
for tr in table.tbody:
if c >= PROXY_UPDATE_QUANTITY: break
td = tr.findAll('td')
ip = td[0].string
port = td[1].string
tmp_proxies.append(ip+':'+port)
c += 1
if self.metux:
with self.metux:
self.proxies = tmp_proxies[:]
else:
self.proxies = tmp_proxies[:]
return len(self.proxies)
def get(self):
return {'http':'http://'+random.choice(self.proxies)}
PROXY_UPDATE_QUANTITY 为每次爬取数量,这个数建议不要太高,不要超过80,最好是20.
proxies实例化后应该执行一次update()方法。如果程序持久化运行,应该每隔一段时间执行一次,保证获取到的代理IP都为最新的可用的,建议为2分钟。
get()方法会从上次爬取到的IP列表中随机返回一个已经格式化好的字典格式。到底要用什么格式,可自行修改代码。