1. 程式人生 > >爬蟲3-time模組和代理

爬蟲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)