標籤:
那堵牆著實可恨!身處IT這個圈子,經常需要用gg查資料(你也可以用來訪問1024,^_^...)。當然,你也可以用百度。其實也不是我不愛用百度,是有緣由的,且聽我細細道來。有一次閑得蛋疼,想看看會不會有人抄襲我的部落格(儘管部落格學得不咋地),於是百度了一下,結果是驚人的。我發現我自己寫的部落格,即使是拿整個標題去搜尋,往往搜不到,搜到的是一堆爬蟲爬去的結果。具體是哪些,這裡就不說了,各自可以拿自己的部落格試一下。以前總是手工收集幾個IP用一段時間,失效了以後再重新收集幾個,如此反覆,煩!於是,想著寫個爬蟲抓取代理IP,然後每次直接資料庫裡面找幾個出來用就行了。然而,爬蟲爬過來的IP有很多已經失效了。這時又淪落為手工測試,這不是為自己增添更多的煩惱嗎?於是寫個檢測代理IP是否可用的程式,讓程式幫我檢測好了。這樣每次我就可以拿到可用的代理IP了。由於爬蟲是用scrapy寫的,為了方便維護,IP檢測就作為scrapy爬蟲裡面的一部分好了。於是有了下面這段檢測的程式:
1、建立檔案:checkproxy.py
#coding=utf-8 import urllib2import urllibimport timeimport socketip_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 proxydef 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_detecteddef 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、測試:
[[email protected] proxyipspider]# python checkproxy.py WORKING: 212.82.126.32:80
當然,這隻是程式的一個原型,真正檢測的程式還需要結合資料庫或檔案操作來完成。代理IP檢測出來了,那麼剩下的就是設定了。設定好以後,盡情地gg吧。1024你想看多久就看多久,不過還是不要看多為好,你懂的。如果你想上臉譜、油土鱉和推特,這些就靠你自己了,這裡只是gg而已。
程式猿嘛,總是想通過自己的雙手來解決點問題。那顆change the world的心沒有變,就像部落格園的口號那樣“代碼改變世界”。看到哪個東西不爽,自己造一個吧。IT界這樣的例子太多了,天天用的Vi、github等等。好了,就到這,1024去,走起。。。
那道牆著實可恨!
python檢測代理IP可否翻越GFW