1. 程式人生 > >【Python55--爬蟲:代理】

【Python55--爬蟲:代理】

一、反爬蟲之隱藏

1、網站檢查訪問的是正常使用者還是程式,關鍵在於User-Agent

1)、第一種方法:採用header

  --修改header(兩種方法):

  -->  在Request之前通過headers引數修改

  -->  在Request之後通過Request.add_header()修改

import urllib.request
import urllib.parse
import json
import random
import time
import hashlib

#使用者輸入翻譯的內容
content = input('
請輸入需要翻譯的內容:') #連線url地址 url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule' #第一種方法: #head = {} #head['User-Agent']='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36' #傳送給伺服器請求的資料 data = {} #此部分資料來源於:FromData data['
i']= content data['from']= 'AUTO' data['to']= 'AUTO' data['smartresult']= 'dict' data['client']= 'fanyideskweb' data['salt']= '15439012305959' data['sign']= 'ba81b8cb1c6dc64c253bf6d250cbc09b' data['ts']= '1543901230595' data['bv']= '6d37ec4625573a83fa9ca0cb1e144ce5' data['doctype']= 'json' data['version']= '
2.1' data['keyfrom']= 'fanyi.web' data['action']= 'FY_BY_CLICKBUTTION' data['typoResult']= 'false' #對資料進行編碼處理 data = urllib.parse.urlencode(data).encode('utf-8') #建立一個request物件,把url和data傳進去,並且使用POS請求 request = urllib.request.Request(url = url,data=data,method='POST') #第二種方法: request.add_header('User-Agent','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36') #開啟請求 reponsend =urllib.request.urlopen(request) #讀取返回來的資料 html = reponsend.read().decode('utf-8') #把返回來的json字串解析成字典 line = json.loads(html) #print(line) #獲取翻譯結果 print('翻譯的結果:%s'%(line['translateResult'][0][0]['tgt']))

2)、要想爬取很多內容,修改header就達不到這種效果了,就需要採用代理

  --  兩種方法:

   -->  time.sleep() 方法  (效率低)

   -->  使用代理

#time.sleep()方法
import
urllib.request import urllib.parse import json import random import time import hashlib while True: #使用者輸入翻譯的內容 content = input('請輸入需要翻譯的內容(輸入q!退出程式):') if content=='q!': break #連線url地址 url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule' #傳送給伺服器請求的資料 data = {} #此部分資料來源於:FromData data['i']= content data['from']= 'AUTO' data['to']= 'AUTO' data['smartresult']= 'dict' data['client']= 'fanyideskweb' data['salt']= '15439012305959' data['sign']= 'ba81b8cb1c6dc64c253bf6d250cbc09b' data['ts']= '1543901230595' data['bv']= '6d37ec4625573a83fa9ca0cb1e144ce5' data['doctype']= 'json' data['version']= '2.1' data['keyfrom']= 'fanyi.web' data['action']= 'FY_BY_CLICKBUTTION' data['typoResult']= 'false' #對資料進行編碼處理 data = urllib.parse.urlencode(data).encode('utf-8') #建立一個request物件,把url和data傳進去,並且使用POS請求 request = urllib.request.Request(url = url,data=data,method='POST') #開啟請求 reponsend =urllib.request.urlopen(request) #讀取返回來的資料 html = reponsend.read().decode('utf-8') #把返回來的json字串解析成字典 line = json.loads(html) #print(line) #獲取翻譯結果 print('翻譯的結果:%s'%(line['translateResult'][0][0]['tgt'])) time.sleep(3) 執行結果: 請輸入需要翻譯的內容(輸入q!退出程式):愛國 翻譯的結果:patriotic 請輸入需要翻譯的內容(輸入q!退出程式):乘法 翻譯的結果:The multiplication 請輸入需要翻譯的內容(輸入q!退出程式):q! >>>