这篇文章教你如何白嫖免费代理网站构造自己的一个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)
这些删掉就行了。
如果这篇文章对你有帮助,请点个赞吧,感谢 😃