`
uule
  • 浏览: 6351874 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

Python验证IP是否可用

 
阅读更多

python爬虫-爬取代理IP并通过多线程快速验证

scrapy爬虫代理——利用crawlera神器,无需再寻找代理IP

 

python爬虫成长之路(二):抓取代理IP并多线程验证

在使用爬虫爬取网络数据时,如果长时间对一个网站进行抓取时可能会遇到IP被封的情况,这种情况可以使用代理更换ip来突破服务器封IP的限制。

随手在百度上搜索免费代理IP,可以得到一系列的网站,这里我们通过对西刺网站的抓取来举例。

 

验证代理IP是否可用,原理是使用代理IP访问指定网站,如果返回状态为200,表示这个代理是可以使用的

http://www.jianshu.com/p/588241a313e7

 

方法1:

import requests

try:
    requests.get('http://wenshu.court.gov.cn/', proxies={"http":"http://121.31.154.12:8123"})
except:
    print 'connect failed'
else:
    print 'success'

 

方法2:

import telnetlib

try:
    telnetlib.Telnet('127.0.0.1', port='80', timeout=20)
except:
    print 'connect failed'
else:
    print 'success'

 

例子:

#coding=UTF-8
import urllib.request



def validateIp():     
    inFile = open('proxy.txt', 'r')
    f = open("proxy2.txt","w")
    url = "http://www.baidu.com/"
      
    for line in inFile.readlines():
        try:            
            #print(line)
            line = line.strip('\n')  
            proxy_host = '://'.join(line.split('='))
            #print(proxy_host)
            proxy_temp = {line.split("=")[0]:proxy_host}
            print(proxy_temp)
            urllib.request.urlopen(url,proxies=proxy_temp).read()
            f.write(line+'\n')
        except Exception as e:
            print('%s connect failed' % line)
            continue
        f.close()
 
    
if __name__ == '__main__':
    validateIp()

结果:

{'http': 'http://218.21.169.19:8998'}

http=218.21.169.19:8998 connect failed

{'http': 'http://27.46.74.38:9999'}

http=27.46.74.38:9999 connect failed

{'http': 'http://60.173.35.99:808'}

http=60.173.35.99:808 connect failed

{'http': 'http://218.4.95.182:80'}

http=218.4.95.182:80 connect failed

{'http': 'http://218.56.132.155:8080'}

http=218.56.132.155:8080 connect failed 

。。

 

网上例子:

python爬虫成长之路(二):抓取代理IP并多线程验证

#coding:utf-8
import urllib2

def url_user_agent(url):
    #设置使用代理
    proxy = {'http':'27.24.158.155:84'}
    proxy_support = urllib2.ProxyHandler(proxy)
    # opener = urllib2.build_opener(proxy_support,urllib2.HTTPHandler(debuglevel=1))
    opener = urllib2.build_opener(proxy_support)
    urllib2.install_opener(opener)

    #添加头信息,模仿浏览器抓取网页,对付返回403禁止访问的问题
    # i_headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
    i_headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.48'}
    req = urllib2.Request(url,headers=i_headers)
    html = urllib2.urlopen(req)
    if url == html.geturl():
        doc = html.read()
        return doc
    return

url = 'http://www.dianping.com/search/category/2/10/g311'
doc = url_user_agent(url)
print doc

 

 

自己写的可用例子:

#coding=UTF-8
import urllib.request
import chardet

def url_user_agent():
    #url = 'http://quote.stockstar.com/stock'
    url = 'http://www.baidu.com/'

    inFile = open('proxy.txt', 'r')
    f = open("available.txt","wb")
    
    for line in inFile.readlines():
        #f.write(line+'\n')  
        
        #print(line)
        line = line.strip('\n')  
        #proxy_host = '://'.join(line.split('='))
        proxy_host = line.split('=')[1]
        #print(proxy_host)
        proxy_temp = {line.split("=")[0]:proxy_host}
        print(proxy_temp)    
        
        #proxy_temp = {'http':'58.33.37.205:8118'}
        #设置使用代理
        #proxy_temp = {'http':'119.5.0.100:808'}
        proxy_support = urllib.request.ProxyHandler(proxy_temp)
        # opener = urllib.request.build_opener(proxy_support,urllib.request.HTTPHandler(debuglevel=1))
        opener = urllib.request.build_opener(proxy_support)
        #i_headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.48'}
        #req = urllib.request.Request(url,headers=i_headers)
        opener.addheaders=[("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64)")]
        
        urllib.request.install_opener(opener)
    
        #添加头信息,模仿浏览器抓取网页,对付返回403禁止访问的问题
        # i_headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
        try:      
            html = urllib.request.urlopen(url,timeout=5)
            content = html.read()
            print(content)
            #print(type(content))
            #print(chardet.detect(content))
            print("==============================")   
            if content.strip() != '':
                line = line + '\n'
                data = line.encode(encoding="UTF-8")
                f.write(data) 
                
        except Exception as e:
            print('%s connect failed' % line)       
    
    f.close() 
    print("Test End !")
   
   
if __name__ == '__main__':  
    url_user_agent()

 

多线程例子:

 

#coding=UTF-8
import urllib.request
import urllib
import re
import time
import socket
import threading

#整理代理IP格式
proxys = []
inFile = open('proxy.txt','r')
proxy_ip=open('proxy_ip.txt','w')  #新建一个储存有效IP的文档

for line in inFile.readlines():
    line = line.strip('\n')  
    #proxy_host = '://'.join(line.split('='))
    proxy_host = line.split('=')[1]
    #print(proxy_host)
    proxy_temp = {line.split("=")[0]:proxy_host}
    print(proxy_temp)    
    proxys.append(proxy_temp)


lock=threading.Lock()  #建立一个锁
#验证代理IP有效性的方法
def test(i):
    socket.setdefaulttimeout(5)  #设置全局超时时间
    #url = "http://quote.stockstar.com/stock"  #打算爬取的网址
    url = "http://www.baidu.com/"  #打算爬取的网址
    try:
        proxy_support = urllib.request.ProxyHandler(proxys[i])
        opener = urllib.request.build_opener(proxy_support)
        opener.addheaders=[("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64)")]
        urllib.request.install_opener(opener)
        res = urllib.request.urlopen(url).read()
        
        # 获取锁,用于线程同步
        lock.acquire()     #获得锁
        print(proxys[i],'is OK')        
        proxy_ip.write('%s\n' %str(proxys[i]))  #写入该代理IP
        
         # 释放锁,开启下一个线程
        lock.release()     #释放锁
    except Exception as e:
        lock.acquire()
        print(proxys[i],e)
        lock.release()
#单线程验证
'''for i in range(len(proxys)):
    test(i)'''
#多线程验证    
threads=[]
start = time.clock()
for i in range(len(proxys)):
    thread=threading.Thread(target=test,args=[i])
    threads.append(thread)
    thread.start()
#阻塞主进程,等待所有子线程结束
for thread in threads:
    thread.join()
    
proxy_ip.close()  #关闭文件

end = time.clock()
print("开始时间: %f s" % start)
print("结束时间: %f s" % end)
print("校验IP耗时: %f s" % (end - start))

 

结果:

...

{'http': '221.197.1.210:14515'} <urlopen error timed out>

{'http': '183.78.183.156:82'} is OK

开始时间: 0.000000 s

结束时间: 6.352310 s

校验IP耗时: 6.352309 s

 

 

#coding:gbk
import requests
'''代理IP地址(高匿)'''
proxy = {
    'http': 'http://117.85.105.170:808',
    'https': 'https://117.85.105.170:808'
}
'''head 信息'''
head = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36', 
             'Connection': 'keep-alive'}
'''http://icanhazip.com会返回当前的IP地址'''
p = requests.get('http://icanhazip.com', headers=head, proxies=proxy)
print(p.text) 

 

 

分享到:
评论

相关推荐

    使用python验证代理ip是否可用的实现方法

    验证代理IP是否可用。原理是使用代理IP访问指定网站,如果返回状态为200,表示这个代理是可以使用的。 # _*_ coding:utf-8 _*_ import urllib2 import re class TestProxy(object): def __init__

    Python 快速验证代理IP是否有效

    在Python编程中,验证代理IP的有效性是一项常见的任务,...以上就是关于Python验证代理IP有效性的基本知识和实践方法,以及可能的优化策略。通过这样的方式,你可以快速筛选出可用的代理IP,以满足各种网络访问需求。

    python抓取免费代理IP

    在验证IP时,更新其有效性状态。 4. **代理IP池维护** 为了保持代理IP池的活力,需要定期运行`check_ips.py`脚本,剔除无效或性能不佳的IP。可以设置定时任务(如使用`schedule`库或Linux的cron job)来执行此过程...

    Python实现的Google IP 可用性检测脚本 - 爱捉吧1

    如果IP可用,它会将其打印到标准输出。 4. 函数`check_for_gae`是针对GAE服务的IP检测。它调用了 `_check` 函数,但具体实现没有给出。通常,这个函数会通过发起HTTP请求到指定的GAE应用ID来判断IP的可用性。 5. ...

    get_ip_python_

    此外,验证IP有效性时可能需要多次尝试或使用不同的目标URL,因为某些代理可能只对特定站点有效。在处理大量IP时,还应考虑多线程或多进程以提高效率。最后,确保你的爬虫行为符合网站的使用条款,尊重数据的版权和...

    Python实现 windows 下代理IP的自动切换

    3. **代理验证**:获取到代理IP后,需要验证其是否可用。可以尝试向一个已知网站发送请求,根据响应判断代理是否正常工作。可以使用`requests`库的`Session`对象,以便在多次请求之间保持相同的会话状态,包括代理...

    获取免费ip代理python代码

    # 在验证IP代理后,调用store_valid_proxy将结果存入数据库 ``` 最后,将以上功能整合,形成完整的获取、验证和存储IP代理的流程: ```python def main(): api_url = "http://your-proxy-api-url.com" # 替换为...

    python实现ip代理池功能示例

    用telnet来验证ip是否可用 把有效的ip写入到本地txt中。当然也可以写入到redis、mongodb中,也可以设置检测程序当代理池中的ip数不够(如:小于20个)时,启动该脚本来重新获取ip,本脚本的代码也要做相应的改变。...

    python3爬取快代理免费代理ip并多线程验证

    获取到代理IP和端口后,我们需要验证它们是否可用。这通常通过向某个网站发送带有代理设置的请求来实现。Python的`requests`库支持设置代理,我们可以使用`proxies`参数。 3. **验证代理IP**: - 设置代理:`...

    GitHub Python IP代理池

    综上所述,"GitHub Python IP代理池"项目是一个综合运用了Python编程、数据库操作、网络请求、代理验证、多线程和API设计等技术的实用工具。用户在使用前需正确安装所有依赖,并遵循`README.md`中的说明进行配置和...

    网络爬虫-如何检测免费代理IP是否有效-Python实例源码.zip

    3. **速度测试**:除了验证是否可用,还需要考虑代理IP的速度。较慢的代理可能会影响爬虫的效率。可以计时发送多次请求,计算平均响应时间。 4. **匿名级别**:代理IP有透明、普通、高匿名等不同级别。高匿名代理能...

    ip代理的Python脚本

    2. **代理IP验证**:由于免费或共享的代理IP稳定性不佳,需要通过验证其可用性,例如使用`requests`库发送GET请求并检查响应状态码。例如: ```python import requests def is_proxy_valid(proxy): try: ...

    Python ip 代理池爬取工具

    3. **代理验证**:获取到的代理IP并非都可用,需要验证其有效性。可以通过向知名网站发送请求并检查响应时间及返回状态来判断。例如,可以使用requests库的`timeouts`参数和`status_code`属性。 4. **代理池设计**...

    python3多线程爬取西刺代理并验证

    使用python3从西刺代理网获取国内高匿代理IP地址,并多线程进行验证,可用的代理保存至本地

    Python实现的Google IP 可用性检测脚本

    该Python脚本是一个用于检测Google IP可用性的工具,主要针对Google App Engine (GAE) 服务和搜索服务。脚本需要Python 3.4或更高版本,并使用了多个Python库来实现其功能。以下是该脚本涉及的关键知识点: 1. **...

    利用Python爬取可用的代理IP

    所以用Python写了个脚本,该脚本可以把能用的代理IP检测出来。 脚本如下: #encoding=utf8 import urllib2 from bs4 import BeautifulSoup import urllib import socket User_Agent = 'Mozilla/5.0 (Windows NT 6.3...

    Python搭建代理IP池实现获取IP的方法

    本文将探讨如何使用Python来创建这样一个代理IP池,并通过获取和验证代理IP来确保其可用性。 首先,我们需要理解代理IP的基本作用。当进行网络爬虫时,如果频繁地从同一IP地址访问某个网站,可能会触发网站的反爬...

    python使用动态代理ip多线程爬取QQ空间相册

    2. **获取代理IP**:使用`proxybroker`获取可用的动态代理IP,存储在一个列表中供后续使用。 3. **登录QQ空间**:使用Selenium模拟浏览器打开QQ空间登录页面,填写账号密码并登录。可能需要处理滑块验证码,使用...

    Python源码实例-11 根据IP.rar

    1. IP地址的表示与验证:在Python中,我们可以使用内置的`ipaddress`模块来处理IP地址。这个模块提供了创建、操作和验证IPv4和IPv6地址的能力。例如,你可以通过`ipaddress.ip_address()`函数来创建一个IP地址对象,...

Global site tag (gtag.js) - Google Analytics