1. 程式人生 > >爬蟲2----隱藏祕訣1

爬蟲2----隱藏祕訣1

一般瀏覽器都會通過檢查User-Agent來判斷到底是瀏覽器正常訪問呢,還是爬蟲非法訪問,所以我們只需要在程式碼裡設定一下,讓瀏覽器檢測出User-Agent即可,具體操作如下:

找到有道翻譯-審查元素-Netbook-headers-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

第一種方法如下:

import urllib.request
import urllib.parse
import json
contend=input('請輸入 需要翻譯的內容:')
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,head)


#req.add_header()
response=urllib.request.urlopen(url,data)
html=response.read().decode('utf-8')
target=json.loads(html)
print('翻譯結果:%s'%(target['translateResult'][0][0]['tgt']))

執行結果:

 

第二種方法

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)
執行結果: