开启多线程,用python打造一个属于自己的ip代理池——简单易懂小白专用

嘿~兄弟!这里有好定西,确定不来看看嘛!

在这里插入图片描述

哈哈哈!既然来了 那就找张椅子

在这里插入图片描述

泡上一壶茶

在这里插入图片描述

这才是打开学习的正确方式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

学习这么伤脑筋的事情,就不能委屈了自己

在这里插入图片描述
在这里插入图片描述

兄弟们!!!
兄弟们!!!
兄弟们!!!

在这里插入图片描述

准备好了吗!!!

在这里插入图片描述

好东西来了!!!

首先需要导入模块
至于为什么要用BeautifulSoup 而不用xpath
就是因为它上手简单,哈哈哈!

额!
好吧!其实xpath也简单!!!
import requests,threading#请求模块和多线程模块
from bs4 import BeautifulSoup#获取网页数据模块
import time#时间模块

导入模块之后,然后需要给脚本上一下粉底,打扮成一个漂亮小仙女

headers={
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
}

在这里插入图片描述

哈哈哈!!!

在这里插入图片描述
如何获得粉底:
在这里插入图片描述

接下来就可以去勾引服务器小哥哥了!
哈哈哈!!!

接下来是写逻辑代码
直接上代码

#encoding='utf-8'
#导入需要模块--
import requests,threading#请求模块和多线程模块
from bs4 import BeautifulSoup#获取网页数据模块

headers={
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
}
#免费代理ip
#获取网页ip获取
def geturl(pagenum,url):#网页的页数,网页的url
		#获取网页URL
        urls=url+str(pagenum)+".html"
        #以text文本形式返回,至于为什么要用text返回,你可以自己打印去看看不用返回的是什么东西
        req=requests.get(urls,headers=headers).text
        #接下来用到BeautifulSoup模块解析网页
        soup=BeautifulSoup(req,'lxml')
        #获取网页里对我们有价值的东西
        tr=soup.find('div',id='main').find_all('tr')#div下id=‘main’下的全部tr标签
        #对tr标签进行for循环取出tr标签下的td标签里的宝贝
        for j in tr[1:]:
            td=j.find_all('td')
            #精准获取td里的数据0和1为td的下标
            ip=td[0].text
            port=td[1].text
            #获取到的东西丢给cleans方法验证这个代理ip是不是有效
            is_avail=cleans(ip,port)
            #如果返回True,则说明有效,并且打印出来
            if is_avail==True:
                print(ip+":"+port)

#对ip清洗
def cleans(ip,port):
    proxy={"http":"http://%s"%(ip)+":%s"%(port),"https":"http://%s"%(ip)+":%s"%(port)}
    try:
        #verify    https验证
        #http://icanhazip.com/这个网站是一个返回ip的网站,自己去看看就知道了
        req=requests.get(url="http://icanhazip.com/",headers=headers,proxies=proxy,timeout=2)#proxies是使用代理
        #对网页返回的ip进行去空格
        ips=req.text.strip()
        #对使用的ip和网页返回的ip进行验证,相同就说明这个ip可用
        if ips==ip:
            return True
        else:
            return False

    except:
        return False
#开启多线程
def getip(url):
    threads = []
    for pagenum in range(10):#存放页数
        t = threading.Thread(target=geturl, args=(pagenum + 1, url))#target放目标方法,就是对上面的网页开启多个线程,args这个放方法需要传的参数
        threads.append(t)

    print('开始爬取代理ip')

    for s in threads:  # 开启多线程爬取
    	#休眠0.3秒
    	time.sleep(0.3)
        s.start()

    for e in threads:  # 等待所有线程结束
        e.join()
    print('爬取完成')

#程序入口
if __name__ == '__main__':
#放代理ip网页的URL
    getip('http://www.66ip.cn/')
喝上一口茶,
结束啦!!!

在这里插入图片描述

哈哈哈!!!!!
学习就是这么简单,快乐!
还不快去学习!!!!!!!

在这里插入图片描述

有什么不对的地方请指出,我们一起学习
我也是刚学习python不久
嘿嘿嘿!~

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值