全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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>标签内

于是我们开始尝试编写,一下为编写思路:

  处理页面的时候,是先提取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端口扫描工具类示例  # 您的  # 就能  # 可用性  # 给大家  # 老样子  # 的是  # 我也  # 就会  # 好了  # 国内  # 有个  # 都能  # 两次  # 不是很  # 我把  # 一遍  # 这是一个  # 希望能  # 很简单  # 又要 


相关文章: 建站主机选择指南:服务器配置与SEO优化实战技巧  微信小程序 input输入框控件详解及实例(多种示例)  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  已有域名能否直接搭建网站?  如何在阿里云服务器自主搭建网站?  建站之星CMS建站配置指南:模板选择与SEO优化技巧  如何快速搭建高效WAP手机网站?  网页设计与网站制作内容,怎样注册网站?  建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析  ,sp开头的版面叫什么?  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  网站制作话术技巧,网站推广做的好怎么话术?  如何设置并定期更换建站之星安全管理员密码?  如何用西部建站助手快速创建专业网站?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?  如何快速搭建支持数据库操作的智能建站平台?  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  定制建站流程步骤详解:一站式方案设计与开发指南  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  如何在搬瓦工VPS快速搭建网站?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  香港服务器部署网站为何提示未备案?  如何通过网站建站时间优化SEO与用户体验?  兔展官网 在线制作,怎样制作微信请帖?  网站制作的步骤包括,正确网址格式怎么写?  如何快速搭建二级域名独立网站?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  如何在阿里云完成域名注册与建站?  建站之星代理平台如何选择最佳方案?  IOS倒计时设置UIButton标题title的抖动问题  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  如何快速搭建虚拟主机网站?新手必看指南  官网建站费用明细查询_企业建站套餐价格及收费标准指南  网站设计制作公司地址,网站建设比较好的公司都有哪些?  建站之星代理如何获取技术支持?  如何通过PHP快速构建高效问答网站功能?  Python lxml的etree和ElementTree有什么区别  潮流网站制作头像软件下载,适合母子的网名有哪些?  javascript中对象的定义、使用以及对象和原型链操作小结  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  制作网站怎么制作,*游戏网站怎么搭建?  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  如何在景安服务器上快速搭建个人网站?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。