python爬虫实现域名下载

该博客介绍了一个使用Python进行网络爬虫的实践案例,通过requests、re、lxml库来抓取和解析网页内容,利用多进程和多线程技术提高下载效率。作者展示了如何定义爬虫类并执行爬取任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

author = ‘li lee’
import requests,re,time
import re
from lxml import etree
from multiprocessing import Process,Pool
import threading
#爬虫类
class Reptile():

#url
url = ''
#定义头信息
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0'
}
# 定义空列表
res_list = []
ip_list = []
#定义初始化的方法
def __init__(self,url):
    self.url = url

#定义爬取数据方法
def Get_Data(self):
    #定义url
    url = self.url
    #发送请求,获取响应
    response = requests.get(url,headers=self.headers)
    return response
#定义解析数据的方法
def Prase_HTML(self,content):
    #将响应文本放到HMTL中
    prase_html = etree.HTML(content.text)
    #获取IP
    ip_html = prase_html.xpath('//table[@class="layui-table"]/tbody/tr/td[1]/text()')
    #获取端口
    port_html = prase_html.xpath('//table[@class="layui-table"]/tbody/tr/td[2]/text()')
    #数据处理
    ip = [i.replace('\n', '').replace('\t', '') for i in ip_html]
    port = [i.replace('\n', '').replace('\t', '') for i in port_html]
    #将ip port转为字典
    vardict = list(zip(ip,port))
    return vardict

#检查IP
def Check_IP(self,ip):
    #检测的地址
    self.url = 'http://httpbin.org/get'

    #定义代理Ip
    proxy_ip = {
        'http':f'{ip[0]}:{ip[1]}',
        'https':f'{ip[0]}:{ip[1]}'
    }

    try:
        #发送请求
        response = requests.get(self.url,headers = self.headers,proxies = proxy_ip,timeout = 1)
        #获取响应
        print(response.json()['origin'])
        return ip
    except:
        print(f'ip不好使{ip}')
        return False

#获取所有可用ip
def Get_IP(self):

    #获取返回的结果
    for res in self.res_list:
        ip = res.get()
        if ip:
            self.ip_list.append(ip)

#进程池
def Process_Pool(self,iplist):
    #创建进程池
    pool = Pool(10)
    #调用函数,检测iP是否好用
    for i in iplist:
        res = pool.apply_async(func=self.Check_IP,args=(i,))

        self.res_list.append(res)


    #3.关闭进程池,等待进程结束
    pool.close()
    pool.join()

#执行
if name == ‘main’:

#定义开始时间
start_time = time.time()
# 实例化
re = Reptile('http://www.89ip.cn/')
#调用函数
data = re.Get_Data()
vardict = re.Prase_HTML(data)

re.Process_Pool(vardict)
re.Get_IP()
print(re.ip_list)
#定义结束时间
end_time = time.time()
#总运行时间
print(end_time-start_time)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值