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

當(dāng)我們從網(wǎng)站抓取一條信息時,如果我們經(jīng)常訪問它,它可能會被被訪問的網(wǎng)站檢測到并被阻止。解決這個問題的方法之一是使用代理ip。當(dāng)我們上網(wǎng)時,我們的電腦會被分配一個IP讓我們嘗試。當(dāng)我們頻繁訪問一個網(wǎng)站時,網(wǎng)站會被阻止,因為我們發(fā)現(xiàn)同一個IP地址被訪問了很多次。此時,更改IP地址是最好的解決方案。此時如果我們使用多個不同的頭,此時會出現(xiàn)多個ip+主機(jī)的組合,訪問時被發(fā)現(xiàn)的概率會進(jì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)用默認(rèn)的開瓶器。
 
open . open(URL)
 
對于沒有反爬蟲機(jī)制的網(wǎng)站,我們只需要直接引入如上的ProxyHandler類進(jìn)行處理,以訪問csdn主頁為例:
 
導(dǎo)入urllib
 
url="http://www.csdn.net/"
 
對于范圍內(nèi)的I(0,10000):
 
html=urllib.urlopen(url)
 
打印html.info()
 
使用上述代碼時,當(dāng)循環(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]
 
這是因為我們使用計算機(jī)的單個ip進(jìn)行頻繁訪問并被檢測到。
 
以下是使用ip代理的代碼:
 
導(dǎo)入urllib2
 
隨機(jī)導(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)頁的標(biāo)題信息只是為了顯示您已經(jīng)訪問過該網(wǎng)頁,并且可以將其修改為您想要顯示的內(nèi)容。
 
打印I
 
除了:
 
打印“已失敗”
 
在1096次測試中檢測到此代碼。我們應(yīng)該知道我的列表中只有6個IP。如果我們增加IPs的數(shù)量,被發(fā)現(xiàn)的概率會不會再次降低?至于上例中的ip代理,可能過了一段時間就不用了,需要在網(wǎng)上搜索最新的ip代理進(jìn)行更換。此外,程序中的異常處理是為了使程序能夠處理訪問ip代碼時出現(xiàn)的問題,因為一些ip代理在訪問時會失敗,這可以使程序更加健壯。
 
對于具有反爬蟲機(jī)制的網(wǎng)頁,以下是訪問csdn中博客的示例:
 
#編碼:utf-8
 
導(dǎo)入urllib2
 
隨機(jī)導(dǎo)入
 
def get_html(url、標(biāo)頭、代理):
 
random_userAget = random.choice(標(biāo)頭)
 
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 "
 
使用來自多個主機(jī)的user_agent信息形成一個列表。當(dāng)然,這個列表中所有的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()
 
主站蜘蛛池模板: 欧美日韩国产另类一区二区三区| 色婷婷中文字幕| 在线小视频国产| 一级做a爱片久久毛片| 日本精品少妇一区二区三区| 亚洲乱码中文字幕综合| 波多野结衣上班族| 免费特级黄毛片| 美女浴室被爆羞羞漫画| 国产乱人伦偷精品视频不卡 | 欧美videos极品| 亚洲欧洲中文日韩久久av乱码| 看一级毛片**直播在线| 午夜视频在线观看视频| 色猫咪av在线网址| 国产亚洲情侣一区二区无| 黄页网址大全免费观看35| 国产精品中文字幕在线观看| 91中文字幕yellow字幕网| 夜夜爽一区二区三区精品| www.99色| 嫩的都出水了18p| 一级毛片www| 成人国产在线24小时播放视频| 久久777国产线看观看精品卜| 日本最新免费二区| 久久国产精品麻豆映画| 日韩国产成人无码AV毛片| 久精品国产欧美亚洲色aⅴ大片| 欧美freesex黑人又粗又大| 亚洲国产成人99精品激情在线| 欧美理论片在线观看| 亚洲熟妇av一区二区三区宅男| 狠狠精品久久久无码中文字幕 | 羞羞视频在线观看网站| 国产一级大片在线观看| 草莓污视频在线观看午夜社区| 国产在线一区二区三区av| 麻豆乱码国产一区二区三区| 国产在线19禁免费观看| 黄床大片免费30分钟国产精品|