Python 爬蟲IP代理池的實現
Python 爬蟲IP代理池的實現
很多時候,如果要多執行緒的爬取網頁,或者是單純的反爬,我們需要透過代理 IP來進行訪問。下面看看一個基本的實現方法。
代理 IP 附件.txt 的提取,網上有很多網站都提供這個服務。基本上可靠性和銀子是成正比的。國內提供的免費IP基本上都是沒法用的,如果要可靠的代理只能付費;國外稍微好些,有些免費IP還是比較靠譜的。
網上隨便搜尋了一下,找了個網頁,本來還想手動爬一些對應的
IP,結果發現可以直接下載現成的txt檔案
下載之後,試試看用不同的代理去爬百度首頁
#!/usr/bin/env python#! -*- coding:utf-8 -*-# Author: Yuan Liimport re,urllib.requestfp=open("c:\\temp\\thebigproxylist-17-12-20.txt",'r')lines=fp.readlines()for ip in lines: try: print("當前代理IP "+ip) proxy=urllib.request.ProxyHandler({"http":ip}) opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler) urllib.request.install_opener(opener) url="(url).read().decode('utf-8','ignore') print("透過") print("-----------------------------") except Exception as err: print(err) print("-----------------------------")fp.close()
結果如下:
C:\Python36\python.exe C:/Users/yuan.li/Documents/GitHub/Python/Misc/爬蟲/proxy.py當前代理IP 137.74.168.174:80透過-----------------------------當前代理IP 103.28.161.68:8080透過-----------------------------當前代理IP 91.151.106.127:53281HTTP Error 503: Service Unavailable-----------------------------當前代理IP 177.136.252.7:3128<urlopen error [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond>-----------------------------當前代理IP 47.89.22.200:80透過-----------------------------當前代理IP 118.69.61.57:8888HTTP Error 503: Service Unavailable-----------------------------當前代理IP 192.241.190.167:8080透過-----------------------------當前代理IP 185.124.112.130:80透過-----------------------------當前代理IP 83.65.246.181:3128透過-----------------------------當前代理IP 79.137.42.124:3128透過-----------------------------當前代理IP 95.0.217.32:8080<urlopen error [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond>-----------------------------當前代理IP 104.131.94.221:8080透過
不過上面這種方式只適合比較穩定的
IP源,如果IP不穩定的話,可能很快對應的文字就失效了,最好可以動態地去獲取最新的IP地址。很多網站都提供API可以實時地去查詢
還是用剛才的網站,這次我們用
API去呼叫,這裡需要瀏覽器偽裝一下才能爬取
#!/usr/bin/env python#! -*- coding:utf-8 -*-# Author: Yuan Liimport re,urllib.requestheaders=("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0")opener=urllib.request.build_opener()opener.addheaders=[headers]#安裝為全域性urllib.request.install_opener(opener)data=urllib.request.urlopen(").read().decode('utf8')ippool=data.split('\n')for ip in ippool: ip=ip.split(',')[0] try: print("當前代理IP "+ip) proxy=urllib.request.ProxyHandler({"http":ip}) opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler) urllib.request.install_opener(opener) url="(url).read().decode('utf-8','ignore') print("透過") print("-----------------------------") except Exception as err: print(err) print("-----------------------------")fp.close()
結果如下:
C:\Python36\python.exe C:/Users/yuan.li/Documents/GitHub/Python/Misc/爬蟲/proxy.py當前代理IP 213.233.57.134:80HTTP Error 403: Forbidden-----------------------------當前代理IP 144.76.81.79:3128透過-----------------------------當前代理IP 45.55.132.29:53281HTTP Error 503: Service Unavailable-----------------------------當前代理IP 180.254.133.124:8080透過-----------------------------當前代理IP 5.196.215.231:3128HTTP Error 503: Service Unavailable-----------------------------當前代理IP 177.99.175.195:53281HTTP Error 503: Service Unavailable
因為直接 for迴圈來按順序讀取文字實在是太慢了,我試著改成多執行緒來讀取,這樣速度就快多了
#!/usr/bin/env python#! -*- coding:utf-8 -*-# Author: Yuan Liimport threadingimport queueimport re,urllib.request#Number of threadsn_thread = 10#Create queuequeue = queue.Queue()class ThreadClass(threading.Thread): def __init__(self, queue): threading.Thread.__init__(self)
super(ThreadClass, self).__init__() #Assign thread working with queue self.queue = queue def run(self): while True: #Get from queue job host = self.queue.get()
print (self.getName() + ":" + host) try: # print("當前代理IP " + host) proxy = urllib.request.ProxyHandler({"http": host}) opener = urllib.request.build_opener(proxy, urllib.request.HTTPHandler) urllib.request.install_opener(opener) url = "(url).read().decode('utf-8', 'ignore') print("透過") print("-----------------------------")
except Exception as err: print(err)
print("-----------------------------") #signals to queue jo
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31555707/viewspace-2285429/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何建立爬蟲代理ip池爬蟲
- 爬蟲如何使用ip代理池爬蟲
- python 爬蟲 代理池Python爬蟲
- Python爬蟲代理池Python爬蟲
- 如何用海外HTTP代理設定python爬蟲代理ip池?HTTPPython爬蟲
- 快速構建Python爬蟲IP代理池服務Python爬蟲
- 代理ip池對爬蟲有多重要爬蟲
- python爬蟲實戰:爬取西刺代理的代理ip(二)Python爬蟲
- 手把手教你爬蟲代理ip池的建立爬蟲
- 構建一個給爬蟲使用的代理IP池爬蟲
- scrapy爬蟲代理池爬蟲
- 代理ip池對爬蟲有什麼好處爬蟲
- Python代理IP爬蟲的簡單使用Python爬蟲
- 用Python爬蟲抓取代理IPPython爬蟲
- Python爬蟲技巧---設定代理IPPython爬蟲
- Golang實現的IP代理池Golang
- 爬蟲採集自建代理ip池的三大優勢爬蟲
- 實用爬蟲-02-爬蟲真正使用代理 ip爬蟲
- python爬蟲從ip池獲取隨機IPPython爬蟲隨機
- 爬蟲代理IP的使用技巧爬蟲
- 如何建立爬蟲IP池?爬蟲
- python爬蟲利用requests製作代理池sPython爬蟲
- 爬蟲之代理池維護爬蟲
- Python爬蟲動態ip代理防止被封的方法Python爬蟲
- Python爬蟲需要了解的代理IP知識Python爬蟲
- Python爬蟲工作對代理IP有哪些需求?Python爬蟲
- python爬蟲利用代理IP分析大資料Python爬蟲大資料
- 代理IP幫助Python爬蟲分析市場Python爬蟲
- python爬蟲之反爬蟲(隨機user-agent,獲取代理ip,檢測代理ip可用性)Python爬蟲隨機
- 爬蟲使用代理防封IP爬蟲
- 代理IP如何突破反爬蟲?爬蟲
- 爬蟲代理怎麼選ip爬蟲
- Python3網路爬蟲(十一):爬蟲黑科技之讓你的爬蟲程式更像人類使用者的行為(代理IP池等)Python爬蟲
- selenium+python設定爬蟲代理IP的方法Python爬蟲
- 爬蟲ip代理池搭建前需解決的問題及搭建思路爬蟲
- 如何用http代理的ip池繞過網站反爬蟲機制?HTTP網站爬蟲
- 爬蟲中代理IP的常見方案爬蟲
- 爬蟲需要代理IP的基本要求爬蟲