爬取自己的IP池,筛选出可用IP

我们接着来应对反爬虫,当我们使用一个IP连续访问一个网站的时候,很容易被这个网站封掉,运气不好,你的IP就永远的被这个网站给封了,那么这时我们有两种处理方法:
第一种是访问一会儿,延迟一会;第二种就是构建一个代理IP池,延迟比较简单,下面我把构建IP池的步骤,以及筛选出可用IP的一系列操作整理出来。

首先我们找到可以免费获取IP的网站(毕竟白嫖才是真香)
http://www.66ip.cn/

可以看到这里有一个免费HTTP获取,我们先获取10个,点进去,页面解析,得到一个URL
在这里插入图片描述

http://www.66ip.cn/mo.php?sxb=&tqsl=10&port=&export=&ktip=&sxa=&submit=%CC%E1++%C8%A1&textarea=
在这里插入图片描述

可以看到tqsl=10,这里就是我们刚才所点的10条,后面想获取更多,就可以把这个值调整的大一些

from urllib import request
from fake_useragent import UserAgent
from bs4 import BeautifulSoup
import re
ge = UserAgent()
url = 'http://www.66ip.cn/mo.php?sxb=&tqsl=100&port=&export=&ktip=&sxa=&submit=%CC%E1++%C8%A1&textarea='
head = {'User-Agent':ge.random}

req = request.Request(url,headers=head)
req = request.urlopen(req)
con = req.read().decode('gb2312')

obj = BeautifulSoup(con, 'html5lib')
listip = [item for item in obj.stripped_strings if re.match(r'\d', item)]
validips = []
for ip in listip:  
    print(ip)
    ip = {'http': ip}
    proxy = request.ProxyHandler(ip)
    opener = request.build_opener(proxy)
    url = 'http://www.baidu.com'
    headinfo = {'User-Agent': ge.random}
    reqhd = request.Request(url, headers=headinfo)
    try:
        req = opener.open(reqhd)
    except Exception as e:
        print ('invalid ip:', ip, e)
    if req.code == 200:
        validips.append(ip)
print(len(validips))
for ip in validips:
    print(ip)

这里将每一个得到的IP直接访问百度,状态码为200的就是合格的,这时我们就加入到目标队列里,然后我们就可以用这些IP去访问网站了;
运行结果如下
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值