原做者及原文連接: blog.csdn.net/c406495762/…html
運行平臺:Windows Python版本:Python3.x IDE:Sublime text3python
上一篇內容,已經學會了使用簡單的語句對網頁進行抓取。接下來,詳細看下urlopen的兩個重要參數url和data,學習如何發送數據data。web
url不只能夠是一個字符串,例如:www.baidu.com。url也能夠是一個Request對象,這就須要咱們先定義一個Request對象,而後將這個Request對象做爲urlopen的參數使用,方法以下:json
# -*- coding: UTF-8 -*-
from urllib import request
if __name__ == "__main__":
req = request.Request("http://fanyi.baidu.com/")
response = request.urlopen(req)
html = response.read()
html = html.decode("utf-8")
print(html)
複製代碼
一樣,運行這段代碼一樣能夠獲得網頁信息。能夠看一下這段代碼和上個筆記中代碼的不一樣,對比一下就明白了。bash
urlopen()返回的對象,可使用read()進行讀取,一樣也可使用geturl()方法、info()方法、getcode()方法。服務器
geturl()返回的是一個url的字符串;session
info()返回的是一些meta標記的元信息,包括一些服務器的信息;app
getcode()返回的是HTTP的狀態碼,若是返回200表示請求成功。函數
關於META標籤和HTTP狀態碼的內容能夠自行百度百科,裏面有很詳細的介紹。學習
瞭解到這些,咱們就能夠進行新一輪的測試,新建文件名urllib_test04.py,編寫以下代碼:
# -*- coding: UTF-8 -*-
from urllib import request
if __name__ == "__main__":
req = request.Request("http://fanyi.baidu.com/")
response = request.urlopen(req)
print("geturl打印信息:%s"%(response.geturl()))
print('**********************************************')
print("info打印信息:%s"%(response.info()))
print('**********************************************')
print("getcode打印信息:%s"%(response.getcode()))
複製代碼
能夠獲得以下運行結果:
咱們可使用data參數,向服務器發送數據。根據HTTP規範,GET用於信息獲取,POST是向服務器提交數據的一種請求,再換句話說:
從客戶端向服務器提交數據使用POST;
從服務器得到數據到客戶端使用GET(GET也能夠提交,暫不考慮)。
若是沒有設置urlopen()函數的data參數,HTTP請求採用GET方式,也就是咱們從服務器獲取信息,若是咱們設置data參數,HTTP請求採用POST方式,也就是咱們向服務器傳遞數據。
data參數有本身的格式,它是一個基於application/x-www.form-urlencoded的格式,具體格式咱們不用瞭解, 由於咱們可使用urllib.parse.urlencode()函數將字符串自動轉換成上面所說的格式。
向有道翻譯發送data,獲得翻譯結果。
新建文件translate_test.py,編寫以下代碼:
# -*- coding: UTF-8 -*-
from urllib import request
from urllib import parse
import json
if __name__ == "__main__":
#對應上圖的Request URL
Request_URL = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=https://www.baidu.com/link'
#建立Form_Data字典,存儲上圖的Form Data
Form_Data = {}
Form_Data['type'] = 'AUTO'
Form_Data['i'] = 'Jack'
Form_Data['doctype'] = 'json'
Form_Data['xmlVersion'] = '1.8'
Form_Data['keyfrom'] = 'fanyi.web'
Form_Data['ue'] = 'ue:UTF-8'
Form_Data['action'] = 'FY_BY_CLICKBUTTON'
#使用urlencode方法轉換標準格式
data = parse.urlencode(Form_Data).encode('utf-8')
#傳遞Request對象和轉換完格式的數據
response = request.urlopen(Request_URL,data)
#讀取信息並解碼
html = response.read().decode('utf-8')
#使用JSON
translate_results = json.loads(html)
#找到翻譯結果
translate_results = translate_results['translateResult'][0][0]['tgt']
#打印翻譯信息
print("翻譯的結果是:%s" % translate_results)
複製代碼
這樣咱們就能夠查看翻譯的結果了,以下圖所示:
JSON是一種輕量級的數據交換格式,咱們須要從爬取到的內容中找到JSON格式的數據,這裏面保存着咱們想要的翻譯結果,再將獲得的JSON格式的翻譯結果進行解析,獲得咱們最終想要的樣子:傑克。
圓方圓學院聚集 Python + AI 名師,打造精品的 Python + AI 技術課程。 在各大平臺都長期有優質免費公開課,歡迎報名收看。 公開課地址: ke.qq.com/course/3627…
加入python學習討論羣 78486745 ,獲取資料,和廣大羣友一塊兒學習。