最近上某乎,发现很多人在用免费的HTTP代理,但是又不知道这个IP是不能可用的,今天带大家get如何判断你网上抓取来的免费HTTP代理是否可用。

一、获取可用的HTTP代理

先用Ping 获取一些可用的IP资源来,如果你是购买的HTTP代理,可以跳过这一步。

import requests
import re#目标地址
url = "目标地址"
#头信息User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36"}#get请求到的数据
response = requests.get(url,headers=headers)#获取源代码
html = response.text
#re.S换行的干扰#正则匹配到源代码中的IP和端口
ips = re.findall("<td data-title=.IP.>(\d+\.\d+\.\d+\.\d+)</td>",html,re.S)
ports = re.findall("<td data-title=.PORT.>(\d+)</td>",html,re.S)#循环交给IPfor ip in zip(ips,ports):proxies = {"http":"http://" + ip[0] + ":" + ip[1],"https":"http://" + ip[0] + ":" + ip[1],}

二、测试

整理一下获取的资源以后,可以测试一下可用性,毕竟免费的资源,你能获取,别人也能获取,不能保证你想用的时候就能用,所以还是需要预先测试一下的。

1.测试样本

如果是少量的测试,利用requests实现判断IP是否可用的代码如下:

# python 3.6+
import requestsurl = "http://www.baidu.com/"
ip, port = "39.137.95.73", "8080"
proxies = {"http": f"http://{ip}:{port}"}
#空白位置为测试HTTP代理和HTTP代理使用端口headers = {"User-Agent": "Mozilla/5.0"}
#响应头
res = requests.get(url, proxies=proxies, headers=headers)
#发起请求
print(res.status_code) #返回响应码

只需要更改这里的ip就可以自动判断是否可用。

如果这里的状态码为200就表示这个ip可用,如果是502等其他的状态码就表示这个ip不可用。

2.多线程测试

举个栗子,比如我们现在有较多的IP资源可用,依然是利用requests实现的方法如下:

测试样本

# ip.txt
110.52.235.87:9999@HTTP#[高匿]湖南省岳阳市 联通
111.43.70.58:51547@HTTP#[未知]黑龙江省 移动(全省通用)
183.196.97.125:41397@HTTP#[未知]河北省廊坊市 移动
110.52.235.210:9999@HTTP#[高匿]湖南省岳阳市 联通
183.166.167.163:8080@HTTP#[未知]安徽省黄山市 电信
111.177.171.242:9999@HTTP#[未知]湖北省随州市 电信
123.127.93.188:44399@HTTP#
....
....

测试代码

# coding=utf-8
#import os
import re
import requests
import threading
from datetime import datetime
from requests import RequestException
from time import sleepBASE_DIR = os.path.dirname(__file__)
IP_TXT = os.path.join(BASE_DIR, datetime.now().strftime('%Y-%m-%d') + '-ip.txt')
SCR_IP_TXT = os.path.join(BASE_DIR, 'ip.txt')MAX_TEST_THREADS = 100class TestThread(threading.Thread):def __init__(self, _ip_li):self.li = _ip_lisuper(TestThread, self).__init__()def run(self):self.li = [_ for _ in self.li if self.test_ip_available(_)]def test_ip_available(self, ip):_proxy = {'https': ip}try:print u'正在检测IP: %s 有效性\n' % ipr = requests.get('https://www.so.com/s?ie=utf-8&fr=none&src=360sou_newhome&q=123', proxies=_proxy,timeout=5)assert u'_360搜索' in r.textexcept (RequestException, AssertionError):return Falseprint u'找到可用HTTP代理: %s\n' % ipreturn Truedef time_wrapper(func):def _wrapper():start_time = datetime.now()func()end_time = datetime.now()seconds = (end_time - start_time).total_seconds()print u'本次执行共消耗: %d分%d秒\n' % (seconds / 60, seconds % 60)return _wrapper@time_wrapper
def parse_ip():# 读取本地ip文件with open(SCR_IP_TXT) as f:_ip_list = re.findall(r'\d+\.\d+\.\d+\.\d+:\d+', f.read())print u'检索到: %d 个IP地址\n' % len(_ip_list)# 平均分配_ip_list到各个线程检测threads = []avg = len(_ip_list) / MAX_TEST_THREADSif len(_ip_list) % MAX_TEST_THREADS != 0:avg += 1for i in range(MAX_TEST_THREADS):_thread = TestThread(_ip_list[i*avg:(i+1)*avg])threads.append(_thread)_thread.start()# 等待所有检测线程退出while threading.active_count() > 1:sleep(10)# 读取所有有效IP并写入文件_ip_list = []for th in threads:_ip_list.extend(th.li)_ip_list = set(_ip_list)print u'\n总共找到 %d 个可用IP\n' % len(_ip_list)with open(IP_TXT, 'w') as f:f.write('\n'.join(_ip_list))if __name__ == '__main__':parse_ip()

三、结论

以上就是测试HTTP代理的可用性方法啦。其实还有其他种的测试方法,鉴于篇幅就不展开说了,黑猫白猫抓到老鼠就是好猫。当然,大部分的免费资源都是不免费的的——付出的时间,精力成本远大于购买IP代理服务商的产品。

如何利用python抓取免费的IP资源、并测试http代理是否可用相关推荐

  1. 利用Python抓取搜索引擎结果

    前一段时间一直在研究如何用python抓取搜索引擎结果,在实现的过程中遇到了很多的问题,我把我遇到的问题都记录下来,希望以后遇到同样问题的童鞋不要再走弯路. 1. 搜索引擎的选取 选择一个好的搜索引擎 ...

  2. python 搜索引擎_利用Python抓取搜索引擎结果

    前一段时间一直在研究如何用python抓取搜索引擎结果,在实现的过程中遇到了很多的问题,我把我遇到的问题都记录下来,希望以后遇到同样问题的童鞋不要再走弯路. 1. 搜索引擎的选取 选择一个好的搜索引擎 ...

  3. pythonallowpos_利用Python抓取并分析京东商品评论数据

    2.1 内容简介 本章主要介绍如何利用Python抓取京东商城商品评论信息,并对这些评论信息进行分析和可视化.下面是要抓取的商品信息,一款女士文胸.这个商品共有红色,黑色和肤色等颜色, 70B到90D ...

  4. python爬取pdf教程_#如何利用Python抓取PDF中的某些内容#python爬取pdf教程

    如何利用Python抓取PDF中的某些内容 学生每天要学习,工作者要工作,家庭主妇每都要务.不论做什么,都有着相应的操作流同样就会有操作技巧.学生运用技巧学习才不会累,学得还会更快更多:工作者掌握技巧 ...

  5. python爬取免费优质IP归属地查询接口

    python爬取免费优质IP归属地查询接口 python爬取免费优质IP归属地查询接口 具体不表,我今天要做的工作就是: 需要将数据库中大量ip查询出起归属地 刚开始感觉好简单啊,毕竟只需要从百度找个 ...

  6. Python学习第四篇:利用python抓取英语单词

    一,为什么这么做? 1,当我们需要自己定制自己的ietls单词本时,往往会因为各种原因不能达到目的.比如词形相近的词不在一起,没有例句等问题. 2,使用python抓取数据,是对python的一种熟练 ...

  7. python抓取网站图片_利用python抓取网站图片

    看了网上关于python抓取网站图片的例子,所以自己也尝试着写一个,但是发现这个网站的src不是标准的路径,需要自己添加前面的目录地址,尝试了几次也不成功,所以希望有经验的朋友指导下. 本人是初学者, ...

  8. 用 Python 抓取阿里云盘资源

    文 | 某某白米饭 来源:Python 技术「ID: pythonall」 前阵子阿里云盘大火,送了好多的容量空间.而且阿里云盘下载是不限速,这点比百度网盘好太多了.这两天看到一个第三方网站可以搜索阿 ...

  9. python抓取免费ip存入redis

    前言 网络爬虫在运行过程中并不顺利,总是会遇到各种各样的问题,如fan爬虫策略,它会试图阻止网络爬虫的运行,限制我们的的ip,所以说我们先需要在请求的时候加上代理ip,避免真实ip被封禁.在某代理批量 ...

最新文章

  1. 基于vehical检测的3D FCN 深度网络
  2. python基础教程第三版豆瓣-1024,程序媛/猿请查收!
  3. 自己动手 CentOS-6.5 安装Oracle11g R2
  4. Spark : ExitCodeException exitCode=15,exitCode=13
  5. MiluGPS(迷路者GPS导航软件)
  6. cassandra 3.x官方文档(5)---探测器
  7. Linux 系统故障排查思路简析
  8. 小程序开发——比较好看的登录界面设计
  9. 微信小程序 测试号 申请
  10. 谷歌浏览器一直无法上网,其他浏览器可以正常上网
  11. 街头篮球服务器一直维护,《街头篮球》2.8新版本停服维护更新公告
  12. qq大厅连连看外挂:c++实现
  13. 微信绑定会员卡服务器出错,微信会员卡跳转到微信小程序出现如下错误?
  14. docker MySQL8
  15. 不写一行代码,让Excel轻松制作动态图表​
  16. git commit三种回退的方式
  17. MRP计算之计划展望期、需求时界、计划时界及关系
  18. CVPR2019论文题目中文列表
  19. s2023gc53次大公约数
  20. 如何正确进行oa软件选型

热门文章

  1. 报错记录(脑子是个好东西!)
  2. 启用apache,发现80端口被占用【已解决】
  3. js 条码枪扫描_js 获取扫码枪信息
  4. 树莓派应用——RTC(DS3231)
  5. (一)初识JavaScript——无处不在的JavaScript,js基础
  6. [转]Flash ActionScript2.0面向对象游戏开发-推箱子
  7. 无法访问netflix服务_处理Netflix在电脑中出错无法打开的详细步骤
  8. error RC2175
  9. 一文读懂 .bss段 的作用
  10. jquery dom节点操作完成备考抽查演练和英雄排名表