首先需要导入模块
至于为什么要用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",
}

python IP地址模拟 python模拟多ip_python

哈哈哈!!!

python IP地址模拟 python模拟多ip_python_02


如何获得粉底:

python IP地址模拟 python模拟多ip_数据_03

哈哈哈!!!

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

#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/')

结束啦!!!