导入所需第三方库
import time #用于休眠
import requests #用于请求
import parsel #用于分解HTML
完成检测IP是否存活方法
#检测代理方法 、 proxies_list为爬取列表
def check_ip(proxies_list):
#使用user_ok列表存储
user_ok = []
#遍历IP列表
for proxie in proxies_list:
# 发送一个请求以便得到该代理的状态码,以百度为例,如果该IP访问百度后,返回的状态码为200时,说明该地阿里可以使用
try:
response = proxie.get(url='https://www.baidu.com', proxies=proxie, timeout=2)
if response.status_code == 200:
# 将该代理以文本形式保存起来
file = open('E:\脚本\IPPrioxy_Pool\IP.txt', 'a+')
file.write(str(proxie) + "\n")
except:
#输出代理信息
print('当前代理:', proxie, '不可使用')
# 输出代理信息
else:
print('当前代理:', proxie, '可以使用')
return user_ok
爬取数据网站来源
# 创建列表用于存储数据
proxies_list = []
# 遍历网页数据
for page in range(1, 10): #以一到十页测试
# 输出爬取页数
print(f"正在爬取第{page}页") #{page}为字符串拼接
time.sleep(1) #休眠一秒
url = 'http://www.kxdaili.com/dailiip/2/{page_turn}.html'.format(page_turn=page)
# 以开心代理测试获取数据
# 设置浏览器标识
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'}
# 构造请求
response = requests.get(url=url, headers=headers)
# 指定一个编码 = 获取一个编码
response.encoding = response.apparent_encoding
# 获取页面数据
html_data = response.text
#print(html_data)
# 使用xpath 方法解析html页面
# 转换数据类型
selector = parsel.Selector(html_data)
#print(selector) #测试数据运行
trs = selector.xpath('//table/tbody/tr')
#print(trs) # 测试字符串
# 将拼接好的完整地址保存在一个名为proxies_list的列表中
# 遍历每一个tr标签
i = 0 #开心代理url设置需要单独页码进行定位
for tr in trs:
i+=1
ip = tr.xpath(f'//table/tbody/tr[{i}]/td[1]/text()').get()
adr = tr.xpath(f'//table/tbody/tr[{i}]/td[2]/text()').get()
print(ip,adr)
proxies_dict = {
# 字符串的拼接
"http": ip + ":" + adr,
"https": ip + ":" + adr,
}
proxies_list.append(proxies_dict)
print('获取成功', proxies_dict)
print(proxies_list)
print('获取的代理数据为:', len(proxies_list))
# proxies_list.append(proxies_dict)
print('开始检测代理')
user_ok = check_ip(proxies_list)
# 输出信息用以提示
print('可以使用的代理:', user_ok)
print('可以使用的代理数量为:', len(user_ok))