今天咱写一个挺实用的工具,就是扫描并获取可用的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>标签内
于是我们开始尝试编写,一下为编写思路:
处理页面的时候,是先提取tr标签,再将tr标签中的td标签提取
所以运用了两次bs操作,并且第二次使用bs操作时需要进行str处理
因为我们获得tr之后,我们需要其中的2,3,6号的东西,
但是当我们用一个for循环输出的i并不能进行组的操作
所以我们干脆分别对每一个td的soup进行第二次操作之后直接提取2,3,6
提取之后,直接加上.string提取内容即可
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-8 import 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 = queue def 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 e pass def 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'\[(.*"It's down,sir!" if __name__ == '__main__': main()
这样我们就能把网站上所提供的能用的代理ip全部写入文件ip_proxy.txt文件中了
以上这篇python扫描proxy并获取可用代理ip的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
python扫描proxy
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]