QQ 1274510382
Wechat JNZ_aming
商业合作 QQ群538250800
技术搞事 QQ群599020441
加入我们 QQ群649347320
纪年科技aming
网络安全 ,深度学习,嵌入式,机器强化,生物智能,生命科学。
import urllib.request
import urllib
import requests
import re
import time
import random
proxys = []
def show_interface():
choice=input("请选择功能:1.显示可用代理;2.显示可用代理并生成文本;3.退出系统:")
return choice
def get_proxyIP():
ip_title=[]#IP列表
try:
page_num=input('想要爬取多少个代理IP页面(注:每个页面包含100个IP地址,输入数值大于等于2,小于等于705):')
if int(page_num)<2 or int(page_num)>705:
print(">>>>>已经说明清楚了,再乱输的是傻逼 o -_-)=○)°O°) 给你一拳!")
return ip_title
else:
for i in range(1,int(page_num)):
url='http://www.xicidaili.com/nt/'+str(i)
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64)"}
request=urllib.request.Request(url=url,headers=headers)
response=urllib.request.urlopen(request)
content=response.read().decode('utf-8')
pattern=re.compile('(\d.*?|HTTP|HTTPS) ')
ip_page=re.findall(pattern,str(content))
ip_title.extend(ip_page)
time.sleep(random.choice(range(1,3)))
print('代理IP地址 ','\t','端口','\t','类型','\t\t\t','存活时间','\t\t','验证时间')
for i in range(0,len(ip_title),5):
if len(ip_title[i])<14 and len(ip_title[i])>10:
print(ip_title[i],' ','\t',ip_title[i+1],'\t',ip_title[i+2],'\t\t\t',ip_title[i+3],'\t\t',ip_title[i+4])
elif len(ip_title[i])<=10:
print(ip_title[i], ' ', '\t', ip_title[i + 1],'\t', ip_title[i + 2],'\t\t\t', ip_title[i + 3],'\t\t',ip_title[i+4])
else:
print(ip_title[i],' ','\t',ip_title[i+1],'\t',ip_title[i+2],'\t\t\t',ip_title[i+3],'\t\t',ip_title[i+4])
return ip_title
except ValueError:
print(">>>>>已经说明清楚了,再乱输的是傻逼 o -_-)=○)°O°) 给你一拳!")
return ip_title
proxy_ip=open('proxy_ip.txt','w')#新建文档存储有效IP
def effective_IP(ip_title):
socket.setdefaulttimeout(5)#设置全局超时时间
url='https://www.cnblogs.com/sjzh/p/5990152.html'
try:
for i in range(0,len(ip_title),5):
ip={ip_title[i+2]:ip_title[i]+":"+ip_title[i+1]}
proxy_support=urllib.request.ProxyHandler(ip)
opener=urllib.request.build_opener(proxy_support)
opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64)')]
urllib.request.install_opener(opener)
res=urllib.request.urlopen(url).read()
print(ip_title[i]+':'+ip_title[i+1],'is OK')
proxy_ip.write('%s\n'%str('\''+ip_title[i+2]+'\''+':'+'\''+ip_title[i]+':'+ip_title[i+1]+'\''))#写入IP
print('总共爬取了'+str(len(ip_title)/5)+'个有效IP')
except Exception as e:
print(i,e)
if __name__=='__main__':
print(' ')
print(' ')
print(' ◆◆ ◆◆◆◆◆ ◆◆◆◆◆◆◆◆◆◆◆◆◆◆ ')
print(' ◆◆ ◆◆ ◆◆◆ ◆ ◆◆ ◆ ◆ ◆◆◆◆ ◆◆◆◆◆◆◆ ')
print(' ◆◆ ◆ ◆◆ ◆ ◆ ◆ ◆ ◆◆◆ ◆◆◆◆◆◆◆◆ ')
print(' ◆◆◆ ◆ ◆◆◆ ◆ ◆◆◆◆◆◆◆◆◆ ◆◆ ◆◆ ◆◆◆◆ ')
print(' ◆◆◆◆◆◆◆◆◆◆◆◆◆◆ ◆ ◆ ◆ ◆ ◆◆ ◆◆ ◆◆◆ ')
print(' ◆◆◆ ◆◆ ◆ ◆ ◆ ◆ ◆◆ ◆◆ ◆◆◆◆ ')
print(' ◆◆◆ ◆◆ ◆◆◆◆◆◆◆ ◆ ◆◆ ◆◆ ◆◆◆◆◆◆◆ ')
print(' ◆ ◆ ◆◆ ◆ ◆◆◆◆◆◆◆◆◆ ◆◆ ◆◆◆◆◆◆ ')
print(' ◆ ◆◆ ◆ ◆ ◆◆ ◆◆ ')
print(' ◆ ◆◆ ◆ ◆ ◆◆ ◆◆ ')
print(' ◆ ◆◆ ◆ ◆ ◆◆◆◆◆◆◆◆◆ ◆◆ ◆◆ ')
print(' ◆ ◆◆◆ ◆◆ ◆◆◆ ◆ ◆◆◆◆◆ ◆◆◆◆◆◆ ')
print(' ◆ ◆◆ ◆◆ ◆◆◆◆ ◆ ')
print(' ◆ ◆◆◆◆ ◆◆◆◆ ◆◆◆◆◆◆◆◆◆◆◆ ')
print(' ◆ ◆◆ ')
print('')
print('')
choice = show_interface()
while True:
if choice=='1':
get_proxyIP()
i=input(">>>>>还想继续使用该系统?(Y/N):")
if i=='Y' or i=='y':
choice=show_interface()
else:
print('>>>>>欢迎再次使用*_*,我也要睡觉觉了(-_-)ZZZ')
break
if choice=='2':
ip_title=get_proxyIP()
effective_IP(ip_title)
i = input(">>>>>还想继续使用该系统?(Y/N):")
if i == 'Y' or i == 'y':
choice = show_interface()
else:
print('>>>>>欢迎再次使用*_*,我也要睡觉觉了(-_-)ZZZ')
break
if choice=='3':
print('>>>>>欢迎再次使用*_*,我也要睡觉觉了(-_-)ZZZ')
break
import requests
import parsel
import time
def check_ip(proxies_list):
"""检测ip的方法"""
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36'}
can_use = []
for proxy in proxies_list:
try:
response = requests.get('http://www.baidu.com', headers=headers, proxies=proxy, timeout=0.1) # 超时报错
if response.status_code == 200:
can_use.append(proxy)
except Exception as error:
print(error)
return can_use
import requests
import parsel
# 1、确定爬取的url路径,headers参数
base_url = 'https://www.kuaidaili.com/free/'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36'}
# 2、发送请求 -- requests 模拟浏览器发送请求,获取响应数据
response = requests.get(base_url, headers=headers)
data = response.text
# print(data)
# 3、解析数据 -- parsel 转化为Selector对象,Selector对象具有xpath的方法,能够对转化的数据进行处理
# 3、1 转换python可交互的数据类型
html_data = parsel.Selector(data)
# 3、2 解析数据
parse_list = html_data.xpath('//table[@class="table table-bordered table-striped"]/tbody/tr') # 返回Selector对象
# print(parse_list)
# 免费 IP {"协议":"IP:port"}
# 循环遍历,二次提取
proxies_list = []
for tr in parse_list:
proxies_dict = {}
http_type = tr.xpath('./td[4]/text()').extract_first()
ip_num = tr.xpath('./td[1]/text()').extract_first()
port_num = tr.xpath('./td[2]/text()').extract_first()
# print(http_type, ip_num, port_num)
# 构建代理ip字典
proxies_dict[http_type] = ip_num + ':' + port_num
# print(proxies_dict)
proxies_list.append(proxies_dict)
print(proxies_list)
print("获取到的代理ip数量:", len(proxies_list), '个')
# 检测代理ip可用性
can_use = check_ip(proxies_list)
print("能用的代理:", can_use)
print("能用的代理数量:", len(can_use))