IP代理池proxy,自建,免费,详细教程

这篇文章教你如何白嫖免费代理网站构造自己的一个ip代理池,不在为反爬检测而烦恼。
思路就是找到一个免费ip网站,然后抓取上面的ip,去一个一个测试,能用的返回,不能用的扔掉。
网站:http://www.nimadaili.com/。

import requests as r
from pymongo import MongoClient
import lxml.html

url = 'http://www.nimadaili.com/'

headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36'}

req = r.get(url, headers=headers).content.decode()

req_1 = lxml.html.fromstring(req)

首先就是伪装浏览器,lxml.html.fromstring是为了接下来的xpath提取。

Ip = req_1.xpath('//tbody[@style="background: #fff;"]/tr/td/text()')

ip已经有了,现在就i需要去测试能不能用,测试网站:http://icanhazip.com/。这个网站直接返回你的Ip地址,如果ip能用,就会返回,如果不能用就会报错,所以测试思路很简单。

ip =[]
kinds=[]
client = MongoClient()
database = client['ip池']
collection = database['spider']
ips=[]
#https从90开始,http从0开始
for i in range(0,int(len(Ip)/7)):
    
    ip.append(Ip[0+i*7])
    kinds.append(Ip[1+i*7]+Ip[2+i*7])

由于这个网站的第一页ip有120个,http,https都有,经过对比,发现需要https代理的时候,将0改为90就行,上面几行,是我将能用的Ip存储在mongodb数据库里,方便使用。

url_1 = 'http://icanhazip.com/'
print(len(ip))
b=int(input('输入检验的ip数组:'))

for i in range(b,b*10+10):
    
    proxies = {'http':ip[i]}
    try:
        req = r.get(url_1,headers=headers,proxies=proxies).content.decode()
        if req!=0:
            a=kinds[i]+'://'+ip[i]
            print(a)
            ips.append({'kinds':kinds[i],'ip':ip[i]})
                    
    except:
        print("目前测试的"+kinds[i]+"ip不能用,开始测试下一个ip")

collection.insert(ips)

我将ip分为20个一组,这样也容易测试,如果仅仅需要几个Ip来用,输入1就行,需要的多就数字大一点。
req就是测试网站返回的数据,如果不等于0说明ip可以使用,然后将所有能用的Ip存在ips列表里面,在存入数据库。看一下运行效果。
在这里插入图片描述
最后这个报错不用管它,是数据库的。贴上全部代码

import requests as r
from pymongo import MongoClient
import lxml.html


url = 'http://www.nimadaili.com/'

headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36'}

req = r.get(url, headers=headers).content.decode()


req_1 = lxml.html.fromstring(req)

Ip = req_1.xpath('//tbody[@style="background: #fff;"]/tr/td/text()')


ip =[]
kinds=[]
client = MongoClient()
database = client['ip池']
collection = database['spider']
ips=[]
#https从90开始,http从0开始
for i in range(0,int(len(Ip)/7)):
    
    ip.append(Ip[0+i*7])
    kinds.append(Ip[1+i*7]+Ip[2+i*7])
    

url_1 = 'http://icanhazip.com/'
print(len(ip))
b=int(input('输入检验的ip数组:'))

for i in range(b,b*10+10):
    
    proxies = {'http':ip[i]}
    try:
        req = r.get(url_1,headers=headers,proxies=proxies).content.decode()
        if req!=0:
            a=kinds[i]+'://'+ip[i]
            print(a)
            ips.append({'kinds':kinds[i],'ip':ip[i]})
            
            
        
    except:
        print("目前测试的"+kinds[i]+"ip不能用,开始测试下一个ip")

collection.insert(ips)

基本上这个代码是可以直接拿来用的,当然如果你没有mongodb,可以把
from pymongo import MongoClient
client = MongoClient()
database = client[‘ip池’]
collection = database[‘spider’]
collection.insert(ips)
这些删掉就行了。
如果这篇文章对你有帮助,请点个赞吧,感谢 😃

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值