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

tech2025-09-24  20

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

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

泡上一壶茶

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

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

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

准备好了吗!!!

好东西来了!!!

首先需要导入模块 至于为什么要用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不久 嘿嘿嘿!~

最新回复(0)