今天咱写一个挺实用的工具,就是扫描并获取可用的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'\[(.*?)\]',i.string)
if a[0] == ip:
#print proxy
f.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 = 10
for 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的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# python扫描proxy
# Python扫描IP段查看指定端口是否开放的方法
# Python实现扫描局域网活动ip(扫描在线电脑)
# python局域网ip扫描示例分享
# Python实现TCP/IP协议下的端口转发及重定向示例
# python实现一个简单的ping工具方法
# Python获取网段内ping通IP的方法
# 在Python中调用Ping命令
# 批量IP的方法
# Python实现的IP端口扫描工具类示例
# 您的
# 就能
# 可用性
# 给大家
# 老样子
# 的是
# 我也
# 就会
# 好了
# 国内
# 有个
# 都能
# 两次
# 不是很
# 我把
# 一遍
# 这是一个
# 希望能
# 很简单
# 又要
相关文章:
微信小程序制作网站有哪些,微信小程序需要做网站吗?
宝塔建站助手安装配置与建站模板使用全流程解析
如何在宝塔面板中修改默认建站目录?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
如何在万网ECS上快速搭建专属网站?
建站之星后台管理:高效配置与模板优化提升用户体验
如何在建站宝盒中设置产品搜索功能?
南京网站制作费用,南京远驱官方网站?
安云自助建站系统如何快速提升SEO排名?
如何通过PHP快速构建高效问答网站功能?
微信推文制作网站有哪些,怎么做微信推文,急?
如何在IIS服务器上快速部署高效网站?
如何快速完成中国万网建站详细流程?
如何在服务器上三步完成建站并提升流量?
微信小程序 input输入框控件详解及实例(多种示例)
黑客如何通过漏洞一步步攻陷网站服务器?
c# 在ASP.NET Core中管理和取消后台任务
西安专业网站制作公司有哪些,陕西省建行官方网站?
网站微信制作软件,如何制作微信链接?
如何零成本快速生成个人自助网站?
如何选择域名并搭建高效网站?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
建站之星云端配置指南:模板选择与SEO优化一键生成
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
在线制作视频的网站有哪些,电脑如何制作视频短片?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
济南专业网站制作公司,济南信息工程学校怎么样?
如何规划企业建站流程的关键步骤?
中山网站推广排名,中山信息港登录入口?
建站之星24小时客服电话如何获取?
如何在新浪SAE免费搭建个人博客?
为什么Go需要go mod文件_Go go mod文件作用说明
php json中文编码为null的解决办法
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?
安徽网站建设与外贸建站服务专业定制方案
详解jQuery停止动画——stop()方法的使用
如何快速搭建响应式可视化网站?
如何设置并定期更换建站之星安全管理员密码?
淘宝制作网站有哪些,淘宝网官网主页?
建站之星如何取消后台验证码生成?
建站之星安装失败:服务器环境不兼容?
建站之星图片链接生成指南:自助建站与智能设计教程
建站主机核心功能解析:服务器选择与网站搭建流程指南
建站之星会员如何解锁更多建站功能?
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
制作网页的网站有哪些,电脑上怎么做网页?
如何快速搭建高效可靠的建站解决方案?
大连网站制作公司哪家好一点,大连买房网站哪个好?
*请认真填写需求信息,我们会在24小时内与您取得联系。