mac或linux下可以work的代码如下:

# coding=utf-8import requests
import re
from bs4 import BeautifulSoup as bs
import Queue
import threading
import random
import reheaders_useragents = []
headers_referers = []
headers_referers.append('http://www.google.com/?q=')
headers_referers.append('http://www.usatoday.com/search/results?q=')
headers_referers.append('http://engadget.search.aol.com/search?q=')
headers_useragents.append('Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.3) Gecko/20090913 Firefox/3.5.3')
headers_useragents.append('Mozilla/5.0 (Windows; U; Windows NT 6.1; en; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)')
headers_useragents.append('Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)')
headers_useragents.append('Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.1) Gecko/20090718 Firefox/3.5.1')
headers_useragents.append('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.219.6 Safari/532.1')
headers_useragents.append('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; InfoPath.2)')
headers_useragents.append('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30729)')
headers_useragents.append('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Win64; x64; Trident/4.0)')
headers_useragents.append('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; .NET CLR 2.0.50727; InfoPath.2)')
headers_useragents.append('Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)')
headers_useragents.append('Mozilla/4.0 (compatible; MSIE 6.1; Windows XP)')
headers_useragents.append('Opera/9.80 (Windows NT 5.2; U; ru) Presto/2.5.22 Version/10.51')class proxyPick(threading.Thread):def __init__(self, queue):threading.Thread.__init__(self)self._queue = queuedef run(self):while not self._queue.empty():url = self._queue.get()proxy_spider(url)def proxy_spider(url):headers = {#  .......}headers['User-Agent'] = random.choice(headers_useragents)headers['Cache-Control'] = 'no-cache'headers['Accept-Charset'] = 'ISO-8859-1,utf-8;q=0.7,*;q=0.7'headers['Referer'] = random.choice(headers_referers) + str(random.randint(5, 10))headers['Keep-Alive'] = str(random.randint(110, 120))headers['Connection'] = 'keep-alive'r = requests.get(url=url, headers=headers)soup = bs(r.content, "html.parser")data = soup.find_all(name='tr', attrs={'class': re.compile('|[^odd]')})for i in data:soup = bs(str(i), 'html.parser')data2 = soup.find_all(name='td')ip = str(data2[1].string)port = str(data2[2].string)types = str(data2[5].string).lower()proxy = {}proxy[types] = '%s:%s' % (ip, port)print proxy, " check proxy"try:proxy_check(proxy, ip)except Exception, e:print epassdef proxy_check(proxy, ip):# url = 'http://1212.ip138.com/ic.asp'# url = 'https://www.ipip.net/ip.html'# url = 'http://www.baid.com'# url = 'http://ip138.com/'url = 'http://2018.ip138.com/ic.asp'r = requests.get(url=url, proxies=proxy, timeout=6)# r.encoding = 'gb2312' for url = 'http://ip138.com/'reip = r'\[(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\]'# print r.textf = open('ip_proxy.txt', 'a+')found = re.search(reip, r.text, re.M | re.I)if found:ip2 = found.group(1)print "ip==> : ", ip2if ip2 == ip:print "*" * 30print "ip is wanted:", ipf.write('%s' % proxy + '\n')print "*" * 30# import sys# sys.exit(0)f.close()# proxy_spider()def main():queue = Queue.Queue()for i in range(1, 2288):queue.put('http://www.xicidaili.com/nn/' + str(i))threads = []thread_count = 10for i in range(thread_count):spider = proxyPick(queue)threads.append(spider)for i in threads:i.start()for i in threads:i.join()print "It's down,sir!"if __name__ == '__main__':main()

最后得到的可用结果就几个,蛋疼:

{'http': '118.190.95.43:9001'}
{'http': '118.190.95.35:9001'}
{'http': '101.236.35.98:8866'}
{'http': '101.236.23.202:8866'}
{'http': '175.11.213.25:808'}
{'http': '106.56.102.141:8070'}
{'http': '121.231.155.161:6666'}
{'http': '120.25.81.117:80'}
{'http': '117.63.78.100:6666'}
{'http': '111.231.115.150:8888'}
{'http': '222.185.23.251:6666'}
{'http': '106.56.102.107:8070'}
{'http': '118.114.77.47:8080'}
{'http': '115.28.90.79:9001'}
{'http': '58.57.75.142:63000'}

python扫描proxy并获取可用代理ip的实例

from:https://www.jb51.net/article/120480.htm
下面小编就为大家带来一篇python扫描proxy并获取可用代理ip的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

今天咱写一个挺实用的工具,就是扫描并获取可用的proxy

首先呢,我先百度找了一个网站:http://www.xicidaili.com 作为例子

这个网站里公布了许多的国内外可用的代理的ip和端口

我们还是按照老样子进行分析,就先把所有国内的proxy扫一遍吧

点开国内部分进行审查发现,国内proxy和目录为以下url:

http://www.xicidaili.com/nn/x

这个x差不多两千多页,那么看来又要线程处理了。。。

老样子,我们尝试是否能直接以最简单的requests.get()获取内容

返回503,那么我们加一个简单的headers

返回200,成咯

好了我们先进行网页内容分析并获取想要的内容

我们发现,包含ip信息的内容在<tr>标签内,于是我们就能很方便的用bs进行获取标签内容

但是我们随之又发现,ip、端口、协议的内容分别在提取的<tr>标签的第2,3,6三个<td>标签内

r = requests.get(url = url,headers = headers) soup = bs(r.content,"html.parser") data = soup.find_all(name = 'tr',attrs = {'class':re.compile('|[^odd]')}) for i in data: soup = bs(str(i),'html.parser') data2 = soup.find_all(name = 'td') ip = str(data2[1].string) port = str(data2[2].string) types = str(data2[5].string).lower() proxy = {} proxy[types] = '%s:%s'%(ip,port)

这样,我们每次循环都能生成对应的proxy字典,以便我们接下来验证ip可用性所使用

字典这儿有个注意点,我们有一个将types变为小写的操作,因为在get方法中的proxies中写入的协议名称应为小写,而网页抓取的是大写的内容,所以进行了一个大小写转换

那么验证ip可用性的思路呢

很简单,我们使用get,加上我们的代理,请求网站:

http://1212.ip138.com/ic.asp

这是一个神奇的网站,能返回你的外网ip是什么

url = 'http://1212.ip138.com/ic.asp'
r = requests.get(url = url,proxies = proxy,timeout = 6)

这里我们需要加上timeout去除掉那些等待时间过长的代理,我设置为6秒

我们以一个ip进行尝试,并且分析返回的页面

返回的内容如下:

<html><head><meta xxxxxxxxxxxxxxxxxx><title> 您的IP地址 </title></head><body style="margin:0px"><center>您的IP是:[xxx.xxx.xxx.xxx] 来自:xxxxxxxx</center></body></html>

那么我们只需要提取出网页内[]的内容即可

如果我们的代理可用,就会返回代理的ip

(这里会出现返回的地址还是我们本机的外网ip的情况,虽然我也不是很清楚,但是我把这种情况排除,应该还是代理不可用)

那么我们就能进行一个判断,如果返回的ip和proxy字典中的ip相同,则认为这个ip是可用的代理,并将其写入文件

我们的思路就是这样,最后进行queue和threading线程的处理即可

上代码:

#coding=utf-8import requests
import re
from bs4 import BeautifulSoup as bs
import Queue
import threading class proxyPick(threading.Thread):def __init__(self,queue):threading.Thread.__init__(self)self._queue = queuedef run(self):while not self._queue.empty():url = self._queue.get()proxy_spider(url)def proxy_spider(url):headers = {.......}r = requests.get(url = url,headers = headers)soup = bs(r.content,"html.parser")data = soup.find_all(name = 'tr',attrs = {'class':re.compile('|[^odd]')})for i in data:soup = bs(str(i),'html.parser')data2 = soup.find_all(name = 'td')ip = str(data2[1].string)port = str(data2[2].string)types = str(data2[5].string).lower() proxy = {}proxy[types] = '%s:%s'%(ip,port)try:proxy_check(proxy,ip)except Exception,e:print epassdef proxy_check(proxy,ip):url = 'http://1212.ip138.com/ic.asp'r = requests.get(url = url,proxies = proxy,timeout = 6)f = open('E:/url/ip_proxy.txt','a+')soup = bs(r.text,'html.parser')data = soup.find_all(name = 'center')for i in data:a = re.findall(r'\[(.*?)\]',i.string)if a[0] == ip:#print proxyf.write('%s'%proxy+'\n')print 'write down'f.close()#proxy_spider()def main():queue = Queue.Queue()for i in range(1,2288):queue.put('http://www.xicidaili.com/nn/'+str(i))threads = []thread_count = 10for i in range(thread_count):spider = proxyPick(queue)threads.append(spider)for i in threads:i.start()for i in threads:i.join()print "It's down,sir!"if __name__ == '__main__':main()

这样我们就能把网站上所提供的能用的代理ip全部写入文件ip_proxy.txt文件中了

以上这篇python扫描proxy并获取可用代理ip的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

转载于:https://www.cnblogs.com/bonelee/p/9248264.html

python扫描proxy并获取可用代理ip列表相关推荐

  1. Python 爬取西刺可用代理IP,自带检测。

    功能: 爬取西刺代理IP 添加了自动检测IP是否可用功能 输出到Data.txt文件中 注意: 爬取西刺的时候,有可能真实IP被封,可以先尝试爬取少量的代理IP,放入ip_use中. 测试: 1.测试 ...

  2. 使用Python自动获取可用代理列表

    今天闲来无事,随便写的一个从代理发布网站上提取可用代理列表的脚本. 运行后,可以获取http://cn-proxy.com/发布的可用代理ip和端口的列表. 运行效果如下: 源代码如下,请指教: # ...

  3. Python 抓取可用代理IP

    问题描述 在做数据抓取的时候,经常会碰到有些网站对同一IP的访问频率做限制.遇到这种情况一般只有两种解决方案: 降低抓取频率.这种方法在数据变化不频繁,数据量不大的情况下还好,但是,如果数据变化频繁或 ...

  4. Python爬虫热点项目之实现代理IP池(IP proxy pool)

    代理池概述 代理池就是由多个稳定可用代理IP组成的池子.用来应对ip反爬,而网上的免费代理稳定可用的极少,更有甚者连收费的也不都是稳定可用. 开发环境: windous,python3,sublime ...

  5. python ip动态代理_Python实现爬取可用代理IP

    Python实现爬取可用代理IP,在实现爬虫时,动态设置代理IP可以有效防止反爬虫,但对于普通爬虫初学者需要在代理网站上测试可用代理IP.由于手动测试过程相对比较繁琐,且重复无用过程故编写代码以实现动 ...

  6. Python爬虫:爬取免费代理ip

    之前写的几个爬虫都只能爬取到少量的信息,这是由于一个ip频繁地访问网站,会被认定为非正常的爬虫从而被屏蔽,这时候就需要使用代理ip来访问网站了,具体方法就是在发送request时添加一个proxy参数 ...

  7. 获取免费代理IP,并检验IP有效性

    爬虫程序访问网站,速度很快,很容易突破网站设置的访问次数,此情况下就会被停止访问,或者IP被封.如果此时能有一些代理IP,切换不同的代理IP去访问网站,使网站以为是从不同的机器上访问的,那么代理IP背 ...

  8. 爬取免费可用代理IP

    # _*_ coding:UTF-8 _*_ """程序:IP代理版本:2.0作者:鬼义虎神日期:2019年3月13日1.0功能:如何使用代理IP,验证代理IP可用性2. ...

  9. 使用python为爬虫获取免费代理ip

    免费代理ip的爬取 爬虫一直是python使用的一个重要部分,而许多网站也为此做了许多反爬措施,其中爬虫访问过于频繁直接封ip地址也作为一种"伤敌一千,自损八百"的方法被许多网站采 ...

最新文章

  1. 《GPU高性能编程CUDA实战》中代码整理
  2. sqlserver 多排序的问题
  3. LazyInitializationException的四个解决方案–第2部分
  4. obs多推流地址_(无人直播)教程利用OBS推流抖音直播电脑屏幕或PC游戏
  5. Ubuntu 安装hadoop 伪分布式
  6. cad插入块_「AutoCAD之属性块」别怕难,从零做起,制作属性块只需6步走
  7. java双向循环链表
  8. LeetCode反转链表图解
  9. 一款阿里的知识管理工具
  10. C# - 获取工程里资源(图片、图标等)
  11. ConTeXt TeXmacs
  12. TSE2019-The Art, Science, and Engineering of Fuzzing: A Survey
  13. linux中dd命令详解,Linux dd命令详解
  14. ​合并PDF文件什么方法很简单?看完你就明白了
  15. RF基础(一) RF内建函数库BuiltIn
  16. php怎么访问ldap,用Php如何操作LDAP_PHP
  17. 几何光学中近轴光学与高斯光学的区别
  18. 【CSDN软件工程师能力认证学习精选】Python可视化库
  19. 读书笔记, Python - python-tricks-buffet-awesome-features
  20. 浅析深度学习中优化方法

热门文章

  1. Django报错:mysql ImproperlyConfigured: mysqlclient 1.3.13 or newer is required, you have 0.9.3的解决办法
  2. Linux内核中的seq操作
  3. 通用求根算法zeroin_Modern Robotics运动学数值解法及SVD算法(C matlab)
  4. python音频聚类_Python实现聚类算法AP
  5. java 整合hadoop_Spark 如何摆脱java双亲委托机制优先从用户jar加载类?
  6. ateq测漏仪f620说明书_上海壁挂式测漏仪安全使用说明,煤气房报警器安装安全使用说明...
  7. 计算机能力挑战赛是线上的吗,全国高校计算机能力挑战赛验证码识别竞赛一等奖调参经验分享...
  8. 公司inur php id_,PHP——个人信息管理系统
  9. java兔子_JAVA经典兔子问题
  10. php的构造函数解析