您好,登錄后才能下訂單哦!
今天小編給大家分享一下Python爬蟲如何通過ip代理抓取網頁的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
步驟:
1、urllib2庫中的ProxyHandler類,通過此類可以使用ip代理訪問網頁
proxy_support=urllib2.ProxyHandler({}),其中參數是一個字典{‘類型':'代理ip:端口號'}
2、定制、創建一個opener
opener=urllib2.build_opener(proxy_support)
3、(1)安裝opener
urlib2.install_opener(opener)
(2)調用默認的opener
opener.open(url)
針對沒有反爬蟲機制的網站,只要直接像上面引入ProxyHandler類進行處理,下面以訪問csdn主頁為例:
import urllib
url="http://www.csdn.net/"
for i in range(0,10000):
html=urllib.urlopen(url)
print html.info()
print i
當使用上述代碼時,當循環到20時,就會出現下面的錯誤
Traceback (most recent call last):
File "C:/Users/lenovo/PycharmProjects/untitled1/jt2/__init__.py", line 19, in
html=urllib.urlopen(url)
File "C:\Python27\lib\urllib.py", line 87, in urlopen
return opener.open(url)
File "C:\Python27\lib\urllib.py", line 213, in open
return getattr(self, name)(url)
File "C:\Python27\lib\urllib.py", line 350, in open_http
h.endheaders(data)
File "C:\Python27\lib\httplib.py", line 997, in endheaders
self._send_output(message_body)
File "C:\Python27\lib\httplib.py", line 850, in _send_output
self.send(msg)
File "C:\Python27\lib\httplib.py", line 812, in send
self.connect()
File "C:\Python27\lib\httplib.py", line 793, in connect
self.timeout, self.source_address)
File "C:\Python27\lib\socket.py", line 571, in create_connection
raise err
IOError: [Errno socket error] [Errno 10060]
這是由于用的電腦的單一ip進行反復訪問才被檢測出來的。
下面是使用了ip代理的代碼:
import urllib2
import random
def getHtml(url,proxies):
random_proxy = random.choice(proxies)
proxy_support = urllib2.ProxyHandler({"http":random_proxy})
opener = urllib2.build_opener(proxy_support)
urllib2.install_opener(opener)
html=urllib2.urlopen(url)
return html
url="http://www.csdn.net/"
proxies=["101.53.101.172:9999","171.117.93.229:8118","119.251.60.37:21387","58.246.194.70:8080"
"115.173.218.224:9797","110.77.0.70:80"]
for i in range(0,10000):
try:
html=getHtml(url,proxies)
print html.info() #打印網頁的頭部信息,只是為了展示訪問到了網頁,可以自己修改成想顯示的內容
print i
except:
print "出現故障"
這段代碼在測試1096次時被檢測到了,要知道我的列表中僅有6個ip,倘若增加ip的個數,那么被發現的幾率會不會更低。對于上面例子中的ip代理,或許過段時間就不可以使用了,這就要我們自己去搜新的IP代理來更換。還有程序中的異常處理是為了使程序可以處理ip代碼訪問時出現問題的情況,因為有些ip代理在訪問的時候會出現故障的,這樣做了可以使程序更加健壯。
#網上的ip不一定都能使用的,要多試試,或是選擇黑洞http代理ip,更穩定安全
myproxies=["220.189.249.80:80","124.248.32.43:80"]
html = get_html(url,user_agents,myproxies)
print html.read()
以上就是“Python爬蟲如何通過ip代理抓取網頁”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。