国产精品主播一区二区-国产一级不卡毛片-日本少妇中出-国产视频第二页-青草精品视频-亚洲熟妇丰满多毛xxxx-日韩福利在线-成年人免费观看在线视频-久久久www-91在线视频观看无毒不卡-999国产精品-91久久爽久久爽爽久久片-和搜子居同的日子2hd高清看-鬼眼 电影-中文在线精品-综合网久久-国产精品美女久久久久久

python使用動態(tài)ip抓取網(wǎng)頁

當我們從網(wǎng)站抓取一條信息時,如果我們經(jīng)常訪問它,它可能會被被訪問的網(wǎng)站檢測到并被阻止。解決這個問題的方法之一是使用代理ip。當我們上網(wǎng)時,我們的電腦會被分配一個IP讓我們嘗試。當我們頻繁訪問一個網(wǎng)站時,網(wǎng)站會被阻止,因為我們發(fā)現(xiàn)同一個IP地址被訪問了很多次。此時,更改IP地址是最好的解決方案。此時如果我們使用多個不同的頭,此時會出現(xiàn)多個ip+主機的組合,訪問時被發(fā)現(xiàn)的概率會進一步降低。
 
 
關(guān)于代碼中ip代理的使用,介紹如下:
 
步驟:
 
1.urllib2庫中的ProxyHandler類,通過它可以使用ip代理來訪問網(wǎng)頁。
 
proxy _ support = urllib 2 . proxy handler({ }),其中參數(shù)是字典{'type':' proxy ip:端口號' }。
 
2、定制和創(chuàng)建一個開瓶器。
 
open er = urllib 2 . build _ open er(proxy _ support)
 
3.(1)安裝開啟器。
 
urlib2.install_opener(opener)
 
(2)調(diào)用默認的開瓶器。
 
open . open(URL)
 
對于沒有反爬蟲機制的網(wǎng)站,我們只需要直接引入如上的ProxyHandler類進行處理,以訪問csdn主頁為例:
 
導(dǎo)入urllib
 
url="http://www.csdn.net/"
 
對于范圍內(nèi)的I(0,10000):
 
html=urllib.urlopen(url)
 
打印html.info()
 
使用上述代碼時,當循環(huán)到20時,將出現(xiàn)以下錯誤。
 
追溯(最近一次通話持續(xù)時間):
文件“C:/Users/Lenovo/pycharmports/untitle 1/jt2/_ _ init _ _。py”,第19行,中
html=urllib.urlopen(url)
文件“C:Python27liburllib.py”,第87行,在urlopen中
返回開啟器. open(url)
文件“C:python 27 LiberLib . py”,第213行,處于打開狀態(tài)
返回getattr(自我,姓名)(url)
open_http中第350行的文件“C:Python27liburllib.py”
h.endheaders(數(shù)據(jù))
文件“C:Python27libhttplib.py”,第997行,在endheaders中
自我。_發(fā)送輸出(消息正文)
文件“C:Python27libhttplib.py”,第850行,in _send_output
self.send(消息)
文件“C:Python27libhttplib.py”,第812行,發(fā)送中
self.connect()
文件“C:Python27libhttplib.py”,第793行,在connect中
self.timeout,self.source_address)
create_connection中的文件“C:Python27libsocket.py”,第571行
引發(fā)錯誤
IOError: [Errno套接字錯誤] [Errno 10060]
 
這是因為我們使用計算機的單個ip進行頻繁訪問并被檢測到。
 
以下是使用ip代理的代碼:
 
導(dǎo)入urllib2
 
隨機導(dǎo)入
 
def getHtml(url,代理):
 
random_proxy = random.choice(代理)
 
proxy_support = urllib2。proxy handler({“http”:random _ proxy })
 
open er = urllib 2 . build _ open er(proxy _ support)
 
urllib2.install_opener(opener)
 
html=urllib2.urlopen(url)
 
返回html
 
url="http://www.csdn.net/"
 
代理=["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"]
 
對于范圍內(nèi)的I(0,10000):
 
嘗試:
 
html=getHtml(url,代理)
 
打印。info () #打印網(wǎng)頁的標題信息只是為了顯示您已經(jīng)訪問過該網(wǎng)頁,并且可以將其修改為您想要顯示的內(nèi)容。
 
打印I
 
除了:
 
打印“已失敗”
 
在1096次測試中檢測到此代碼。我們應(yīng)該知道我的列表中只有6個IP。如果我們增加IPs的數(shù)量,被發(fā)現(xiàn)的概率會不會再次降低?至于上例中的ip代理,可能過了一段時間就不用了,需要在網(wǎng)上搜索最新的ip代理進行更換。此外,程序中的異常處理是為了使程序能夠處理訪問ip代碼時出現(xiàn)的問題,因為一些ip代理在訪問時會失敗,這可以使程序更加健壯。
 
對于具有反爬蟲機制的網(wǎng)頁,以下是訪問csdn中博客的示例:
 
#編碼:utf-8
 
導(dǎo)入urllib2
 
隨機導(dǎo)入
 
def get_html(url、標頭、代理):
 
random_userAget = random.choice(標頭)
 
random_proxy = random.choice(代理)
 
#以下是模擬的瀏覽器訪問。
 
req = urllib2。請求(網(wǎng)址)
 
req.add_header(“用戶代理”,random_userAget)
 
req.add_header("GET ",url)
 
req.add_header("Host "," blog.csdn.net ")
 
req.add_header("Referer "," http://blog.csdn.net/?&page=6”)
 
#以下是使用ip代理的訪問。
 
proxy_support = urllib2。proxy handler({“http”:random _ proxy })
 
open er = urllib 2 . build _ open er(proxy _ support)
 
urllib2.install_opener(opener)
 
html = urllib2.urlopen(req)
 
返回html
 
url = "http://blog.csdn.net/?&page=3 "
 
使用來自多個主機的user_agent信息形成一個列表。當然,這個列表中所有的user _ agents都是不完整的,使用的時候可以自己去找。
 
用戶代理= [
 
“Mozilla/5.0(Windows NT 6.3;蘋果我們.。。hrome/45 . 0 . 2454 . 101 Safari/537.36 ",
 
“Mozilla/5.0(Windows NT 6.1)apple WebKit/537。。。。。likeGecko)Chrome/45 . 0 . 2454 . 101 safari/537.36”,
 
" Mozilla/5.0(Windows NT 10.0;蘋果網(wǎng)絡(luò)工具包.。。。。gecko)Chrome/50 . 0 . 2661 . 102 Safari/537.36”,
 
" Mozilla/5.0(Windows NT 6.1;蘋果網(wǎng)絡(luò)工具包/537.3 .。。。ML,像Gecko)Chrome/49 . 0 . 2623 . 112 Safari/537.36”,
 
"用戶代理:Mozilla/5.0(Windows NT 10.0;Win64x64 ).。。WebKit/537.36 (KHTML,像Gecko)Chrome/46 . 0 . 2486 . 0 Safari/537.36 Edge/13.10586”,
 
"用戶代理:Mozilla/5.0(Windows NT 10.0)applebwebki .。。。。36 (KHTML,喜歡Gecko)Chrome/46 . 0 . 2486 . 0 Safari/537.36 Edge/13 . 10586”,
 
" Mozilla/5.0(Windows NT 10.0;蘋果公司.。。。。KHTML,像Gecko)Chrome/50 . 0 . 2661 . 94 Safari/537.36 "

#互聯(lián)網(wǎng)上的ip可能不可用,所以您需要嘗試更多。
 
my proxy =[" 220 . 189 . 249 . 80:80 "、" 124.248.32.43:80"]
 
html = get_html(url、用戶代理、我的代理)
 
打印html.read()
 
山东省| 黑山县| 澳门| 龙胜| 凌海市| 巴楚县| 双鸭山市| 聂荣县| 石棉县| 策勒县| 宝清县| 邵阳市| 右玉县| 郎溪县| 汝城县| 越西县| 庆城县| 巍山| 定州市| 简阳市| 荥经县| 赫章县| 扎囊县| 宁河县| 洪洞县| 灵石县| 手游| 永靖县| 吴忠市| 华宁县| 澄迈县| 永州市| 新营市| 延长县| 上林县| 浠水县| 寻乌县| 扎赉特旗| 南汇区| 马公市| 翁牛特旗|