Python实现检测代理IP是否可以翻墙

yipeiwu_com6年前Python基础

那堵墙着实可恨!身处IT这个圈子,经常需要用gg查资料(你也可以用来访问1024,^_^...)。当然,你也可以用百度。其实也不是我不爱用百度,是有缘由的,且听我细细道来。有一次闲得蛋疼,想看看会不会有人抄袭我的博客(尽管博客学得不咋地),于是百度了一下,结果是惊人的。我发现我自己写的博客,即使是拿整个标题去搜索,往往搜不到,搜到的是一堆爬虫爬去的结果。具体是哪些,这里就不说了,各自可以拿自己的博客试一下。以前总是手工收集几个IP用一段时间,失效了以后再重新收集几个,如此反复,烦!于是,想着写个爬虫抓取代理IP,然后每次直接数据库里面找几个出来用就行了。然而,爬虫爬过来的IP有很多已经失效了。这时又沦落为手工测试,这不是为自己增添更多的烦恼吗?于是写个检测代理IP是否可用的程序,让程序帮我检测好了。这样每次我就可以拿到可用的代理IP了。由于爬虫是用scrapy写的,为了方便维护,IP检测就作为scrapy爬虫里面的一部分好了。于是有了下面这段检测的程序:

1、创建文件:checkproxy.py

#coding=utf-8
 
import urllib2
import urllib
import time
import socket

ip_check_url = 'http://www.google.com.hk/'
user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0'
socket_timeout = 30
 
# Check proxy
def check_proxy(protocol, pip): 
  try:
    proxy_handler = urllib2.ProxyHandler({protocol:pip})
    opener = urllib2.build_opener(proxy_handler)
    # opener.addheaders = [('User-agent', user_agent)] #这句加上以后无法正常检测,不知道是什么原因。
    urllib2.install_opener(opener)

    req = urllib2.Request(ip_check_url)
    time_start = time.time()
    conn = urllib2.urlopen(req)
    # conn = urllib2.urlopen(ip_check_url)
    time_end = time.time()
    detected_pip = conn.read()
    
    proxy_detected = True
 
  except urllib2.HTTPError, e:
    print "ERROR: Code ", e.code
    return False 
  except Exception, detail:
    print "ERROR: ", detail
    return False
 
  return proxy_detected

def main():
  socket.setdefaulttimeout(socket_timeout)
 
  print
  
  protocol = "http"
  current_proxy = "212.82.126.32:80" 
  proxy_detected = check_proxy(protocol, current_proxy)
  if proxy_detected:
    print (" WORKING: " + current_proxy)
  else:
    print " FAILED: %s " % ( current_proxy, )

if __name__ == '__main__':
  main()

2、测试:

[root@bogon proxyipspider]# python checkproxy.py 

 WORKING: 212.82.126.32:80


  当然,这只是程序的一个原型,真正检测的程序还需要结合数据库或文件操作来完成。代理IP检测出来了,那么剩下的就是设置了。设置好以后,尽情地gg吧。1024你想看多久就看多久,不过还是不要看多为好,你懂的。如果你想上脸谱、油土鳖和推特,这些就靠你自己了,这里只是gg而已。

  程序猿嘛,总是想通过自己的双手来解决点问题。那颗change the world的心没有变,就像博客园的口号那样“代码改变世界”。看到哪个东西不爽,自己造一个吧。IT界这样的例子太多了,天天用的Vi、github等等。好了,就到这,1024去,走起。。。

  那道墙着实可恨!

相关文章

使用Django连接Mysql数据库步骤

链接mysql步骤 第一步:在终端下载pymysql文件–pip install pymysql 第二步:在gjango项目的__init__文件中添加代码 import pymys...

python实时检测键盘输入函数的示例

在嵌入式、尤其是机器人的python编程中,经常需要实时检测用户的键盘输入来随时控制机器人,这段代码可以帮助我们提取用户输入的字符,并在按下键盘的时候作出反应。 import sys...

详解Python如何生成词云的方法

详解Python如何生成词云的方法

前言 今天教大家用wrodcloud模块来生成词云,我读取了一篇小说并生成了词云,先看一下效果图: 效果图一: 效果图二: 根据效果图分析的还是比较准确的,小说中的主人公就是“程...

Python开发最牛逼的IDE——pycharm

Python开发最牛逼的IDE——pycharm

Python开发最牛逼的IDE——pycharm(其实其它的工具,例如eclipse也可以写,只不过比较麻烦,需要安装很多的插件,所以说pycharm是最牛逼的) pycharm,下载专...

python利用多种方式来统计词频(单词个数)

python的思维就是让我们用尽可能少的代码来解决问题。对于词频的统计,就代码层面而言,实现的方式也是有很多种的。之所以单独谈到统计词频这个问题,是因为它在统计和数据挖掘方面经常会用到,...