爬蟲3-time模組和代理
爬蟲對資訊的訪問速度高出常人很多,所以伺服器如果監測到速度超過一個固定的閾值,就會讓使用者輸入驗證碼,所以要限制訪問速度,方法有兩個
第一,利用time模組
import urllib.request
import urllib.parse
import json
import time
while True:
contend=input('請輸入 需要翻譯的內容:(輸入‘q’則是退出程式)')
if contend=='q!':
break
url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
#隱藏的第一種方法
#head={}
#head['User-Agent']='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0'
#隱藏的第二種方法
data={}
data['i']=contend
data['from']='AUTO'
data['to']='AUTO'
data['smartresult']='dict'
data['client']='fanyideskweb'
data['salt']='1538989442643'
data['sign']='40954ebe6d906735813c2cd7c2274733'
data['doctype']='json'
data['version']='2.1'
data['keyfrom']='fanyi.web'
data['action']='FY_BY_CLICKBUTTION'
data['typoResult']='false'
#利用urlencode把它編碼成url的形式
data=urllib.parse.urlencode(data).encode('utf-8')
req=urllib.request.Request(url,data)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0')
response=urllib.request.urlopen(url,data)
html=response.read().decode('utf-8')
target=json.loads(html)
print('翻譯結果:%s'%(target['translateResult'][0][0]['tgt']))
time.sleep(5)
執行結果:每隔五秒翻譯一次
第二,利用代理,代理就是它把自己訪問到的資訊都反饋給你,這樣伺服器檢測到的是代理的ip地址,不是你的。
1.引數是一個字典{‘型別’:‘代理ip:埠號’}
proxy_support=urllib.request.ProxyHandler({})
2.定製、建立一個opener
opener=urllib.request.bulid_opener(proxy_support)
3,安裝opener
urllib.request.install_opener(url)
4.開啟opener
opener.open(url)
具體實現步驟:在瀏覽器搜尋‘代理ip’-找到代理ip,http://www.whatismyip.com.tw訪問這個地址就知道你所搜到的ip是什麼型別
程式碼:
import urllib.request
import random
url='http://www.whatismyip.com.tw'
iplist=['119.6.144.73:81','183.203.208.166:8118','111.1.32.28:81']
proxy_support=urllib.request.ProxyHandler({'http':random.choice(iplist)})
opener=urllib.request.build_opener(proxy_support)
urllib.request.install_opener(opener)
response=urllib.request.urlopen(url)
html=response.read().decode('utf-8')
print(html)