由于有些網(wǎng)站不喜歡被程序訪問澄暮,因此他們會檢查鏈接的來源名段,如果訪問來源不是正常的途徑,就給你“掐掉”泣懊。所以為了讓我們的爬蟲更好的為我們服務(wù)伸辟,需要對代碼進行一些改進——隱藏,讓他看起來更像是普通人通過普通瀏覽器的正常點擊馍刮。但是這僅僅是最簡單的方式了信夫,如果這要是用于爬取網(wǎng)頁爬蟲(例如說批量下載圖片。。静稻。)警没,那么一個IP在短時間之內(nèi)連續(xù)進行網(wǎng)頁的訪問,很明顯是不符合普通人類的行為標準的振湾,同事對服務(wù)器造成不小的壓力杀迹。因此服務(wù)器只需要記錄每個IP的訪問頻率,在單位時間之內(nèi)押搪,如果訪問頻率超過一個閾值树酪,便認為該IP地址很可能是爬蟲,于是可以返回一個驗證碼頁面大州,要求用戶填寫驗證碼续语。如果是爬蟲的話當然不可能填寫驗證碼,便可拒絕厦画。
以我們目前的水平疮茄,有兩種策略可以提供選擇:第一種就是延遲提交的時間,還有一種策略就是使用代理根暑。
下面我們就以代理的方式對本地IP頁面進行訪問:
代理地址:http://www.xicidaili.com
#使用代理獲取網(wǎng)頁數(shù)據(jù) 訪問本地IP
def use_proxy_request(proxy_addr, url):
#參數(shù)是一個字典力试,字典的鍵是代理的類型,如 http购裙、ftp 或 https
proxy = urllib.request.ProxyHandler({"http":proxy_addr})
#當 urlopen() 函數(shù)打開一個網(wǎng)頁的時候默認的使用 opener 在工作懂版,可認為是私人定制
opener = urllib.request.build_opener(proxy, urllib.request.HTTPHandler)
#定制請求頭
opener.addheaders = [("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36")]
#將定制好的 opener 安裝到系統(tǒng)中
urllib.request.install_opener(opener)
#請求
response = urllib.request.urlopen(url)
data = response.read().decode("utf-8")
return data
#調(diào)用
proxy_addr = "60.177.224.13:18118"
url = "http://www.whatismyip.com.tw/"
data = use_proxy_request(proxy_addr, url)
print(data)
接下來我們執(zhí)行代碼出現(xiàn)如下效果即可訪問成功:
a.png