Python3網絡爬蟲(二):利用urllib.urlopen向有道翻譯發送數據得到翻譯結果

原做者及原文連接: blog.csdn.net/c406495762/…html

運行平臺:Windows Python版本:Python3.x IDE:Sublime text3python

上一篇內容,已經學會了使用簡單的語句對網頁進行抓取。接下來,詳細看下urlopen的兩個重要參數url和data,學習如何發送數據data。web

1、urlopen的url參數 Agent

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()))
複製代碼

能夠獲得以下運行結果:

2、urlopen的data參數

咱們可使用data參數,向服務器發送數據。根據HTTP規範,GET用於信息獲取,POST是向服務器提交數據的一種請求,再換句話說:

從客戶端向服務器提交數據使用POST;

從服務器得到數據到客戶端使用GET(GET也能夠提交,暫不考慮)。

若是沒有設置urlopen()函數的data參數,HTTP請求採用GET方式,也就是咱們從服務器獲取信息,若是咱們設置data參數,HTTP請求採用POST方式,也就是咱們向服務器傳遞數據。

data參數有本身的格式,它是一個基於application/x-www.form-urlencoded的格式,具體格式咱們不用瞭解, 由於咱們可使用urllib.parse.urlencode()函數將字符串自動轉換成上面所說的格式。

3、發送data實例

向有道翻譯發送data,獲得翻譯結果。

1.打開有道翻譯界面,以下圖所示:

2.鼠標右鍵檢查,也就是審查元素,以下圖所示:

3.選擇右側出現的Network,以下圖所示:

4.在左側輸入翻譯內容,輸入Jack,以下圖所示:

5.點擊自動翻譯按鈕,咱們就能夠看到右側出現的內容,以下圖所示:

6.點擊上圖紅框中的內容,查看它的信息,以下圖所示:

7.記住這些信息,這是咱們一下子寫程序須要用到的。

新建文件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 ,獲取資料,和廣大羣友一塊兒學習。

圓方圓python技術討論羣
圓方圓python技術討論羣
相關文章
相關標籤/搜索