Python零基礎入門二十一之有道詞典的優化

2021-07-26 06:52:53 字數 3608 閱讀 9610

現在,我們乙個個來解決問題:

(1)實現使用者的自定義和多次輸入,我們可以這樣修改**:

import urllib.request

import json

url=''

while

true:

content=input("請輸入你要翻譯的內容(q表示退出程式):")

if content == 'q':

break

#建立乙個字典

data={}

data['type'] = 'auto'

data['i'] = content

data['doctype'] = 'json'

data['xmlversion'] = '1.8'

data['keyfrom'] = 'fanyi.web'

data['ue'] = 'utf-8'

data['action'] = ['fy_by_clickbutton']

data['typoresult']= 'true'

#在這裡還不能直接將data作為引數,需要進行一下資料的解析才可以

#encode是將unicode的編碼轉換成utf-8編碼

data=urllib.parse.urlencode(data).encode('utf-8')

response=urllib.request.urlopen(url,data)

#decode作用是將其他形式的編碼轉換成python使用的unicode編碼

下面再來解決第二個問題,我們有兩種方法來解決問題。

如果要解決這個問題,我們還要簡單收一下urlopen函式,之前我們給其傳遞的引數都是url,其實它的引數也可以是request方法返回的物件,在這裡我們要用這種賦值方法來解決問題,那麼user-agent引數修改為什麼呢?我們直接將用瀏覽器訪問時的user-agent引數拷貝下來就可以了。

**如下:

import urllib.request

import urllib.parse

import json

while(true):

content=input("請輸入你要翻譯的內容(輸入q退出程式):")

if content=='q':

break

url=''

#第一種方法

#head必須是字典型別的引數

head={}

data={}

data['type']='auto'

data['i']= content

data['doctype']= 'json'

data['xmlversion']= '1.8'

data['keyfrom']= 'fanyi.web'

data['ue']= 'utf-8'

data['action']= 'fy_by_clickbutton'

data['typoresult']='true'

data=urllib.parse.urlencode(data).encode('utf-8')

req=urllib.request.request(url,data,head)

response=urllib.request.urlopen(req)

html=response.read().decode('utf-8')

target=json.loads(html)

#print(html)#json格式的資料

print("翻譯結果:%s"%(target['translateresult'][0][0]['tgt']))

也可以使用add_header()函式

關於add_header()函式的官方文件給出的用法。

req=urllib.request.request(url,data)
這樣便可以實現隱藏了。

最後解決第三個問題

(1)一是手動加上延遲

import time

time.sleep(5)

加上這兩行**就可以了,但是每次輸入完成後需要等5秒才能輸入,這樣顯然不能滿足使用者的要求,下面我們使用**來解決這個問題。

當我們使用**的時候,去訪問我們要訪問的**時,我們只需要將要訪問的**給**,**將把你需要的內容給你

這樣去訪問**的就不是自己,而是交給**去訪問

使用**的步驟:

1.引數是乙個字典

proxy_support=urllib.request.proxyhandler({})

2.定製,建立乙個opener(私人定製)

opener=urllib.request.build_opener(proxy_support)

3.安裝opener

urllib.request.install_opener(opener)

4.呼叫opener

opener.open(url)

我們按照步驟來解決新增**:

我們可以訪問 ,這個**將把我們訪問這個**的ip反饋給我們,這樣我們就能夠知道是否是使用**訪問了。

import urllib.request

import random

#列印自己的ip

url=""

#我們可以使用乙個**的列表,以免伺服器有卡頓

iplist=['123.55.194.43:9999','110.73.1.254:8123']

proxy_support=urllib.request.proxyhandler()

opener=urllib.request.build_opener(proxy_support)

#加上頭部

Python零基礎入門二十之爬蟲之抓取有道詞典

這個例子主要是實現我們在python中實現有道詞典的功能,還是通過抓取有道詞典的翻譯的核心 來實現。首先我們先開啟有道詞典的網頁來踩踩點。有了url之後還不行,我們這次不是抓取,而是要向網頁中傳送資料,所以要找到網頁提交的表單。繼續往下看,便找到了我們的表單資料 這樣之後,我們的踩點工才完成了,下面...

零基礎學Python(第二十一章 OS檔案目錄)

os模組是python標準庫中的乙個用於訪問作業系統相關功能的模組,os模組提供了一種可移植的使用作業系統功能的方法。使用os模組中提供的介面,可以實現跨平台訪問。但是,並不是所有的os模組中的介面在全平台都通用,有些介面的實現是依賴特定平台的,比如linux相關的檔案許可權管理和程序管理。在使用o...

python基礎(二十一) 操作SQLite

python操作 使用內建模組sqlite3 游標cursor 引數化查詢 null 什麼都不存 integer 整型 real 親源型別 浮點型 text 包含文字 blob 二進位制大型物件,是乙個可以儲存大量資料的容器 增刪改查 select from 表名 insert into 表名 列1...