這個例子主要是實現我們在python中實現有道詞典的功能,還是通過抓取有道詞典的翻譯的核心**來實現。
首先我們先開啟有道詞典的網頁來踩踩點。
有了url之後還不行,我們這次不是抓取,而是要向網頁中傳送資料,所以要找到網頁提交的表單。
繼續往下看,便找到了我們的表單資料
這樣之後,我們的踩點工才完成了,下面開始**的編寫。在編寫**之前,我們再說一下urlopen這個函式:
關於data的資料型別過的問題,python文件中也給出了我們答案
上述文件中主要的字段我給翻譯過來了:
對於http post請求方法,資料應該是標準應用程式/ x-www-form-urlencoded格式的緩衝區。urllib.parse.urlencode()函式接受2元組的對映或序列,並返回此格式的ascii字串。它應該被編碼為位元組,然後用作資料引數。
也就是說我們首先需要將表單資料以二元組序列儲存起來,這裡我們使用字典,然後使用urllib.parse.urlencode()函式將資料進行格式的轉換,最後對資料進行編碼。
在這裡,先簡單的說一下decode和encode兩個函式的作用:
decode 的作用是將其他編碼的字串轉換成 unicode 編碼,
eg name.decode(「gb2312」),表示將gb2312編碼的字串name轉換成unicode編碼
encode 的作用是將unicode編碼轉換成其他編碼的字串,
eg name.encode(」gb2312「),表示將gb2312編碼的字串name轉換成gb2312編碼
python中使用的編碼是unicode編碼。
import urllib.request
import json
url=''
#建立乙個字典
data={}
data['type'] = 'auto'
data['i'] = 'exciting'
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編碼
html=response.read().decode('utf-8')
target=json.loads(html)
print(target['translateresult'][0][0]['tgt'])
其實我們獲得的html資料是這樣的:
我們可以看到我們要找的資料就在裡面,我們需要將裡面的資料提取出來,其實這是乙個json型別的資料,我們可以使用json模組的loads方法解析出該字串,實際上就是反序列化操作。經過反序列或操作之後我們便可以得到乙個字典,然後一步步便可以提取出我們要的資料。
Python零基礎入門之函式
函式的命名空間和作用域 函式的三類命名空間 內建 全域性 區域性 兩大作用域 全域性 內建和全域性命名空間都屬於全域性作用域 區域性 區域性命名空間屬於區域性作用域 什麼是作用域鏈?就是由外而內的命名空間中的中的變數的生存週期都是就近原則 全域性作用域 大區域性作用域 小區域性作用域 函式的兩大引數...
Python零基礎入門
python零基礎入門 第一周前言 最近在簡單學習python,在之前的學習中也只對c語言有了乙個粗略的了解,可以說在程式設計方面沒有什麼基礎,當然這也是我第一次寫部落格,希望自己越學越好,希望自己加油 在這一周中,還是學習到了不少的東西,也希望把自己學到的東西寫下來,來加強對python的學習,若...
Python入門零基礎
開始認識 不要害怕面對一串密密麻麻的英文本元。如果你將它們獨自分開,你會發現它們就像英文單詞,都有固定的作用。不要被第一眼的陌生感所產生的恐懼給蒙蔽。而要將 看成 變數 可以用來儲存字面量,變數本身沒有任何意思 如 a hello world abc 1,dfg 2,c abc dfg。其中a ab...