詳解Python3網(wǎng)絡(luò)爬蟲(二):利用urllib.urlopen向有道翻譯發(fā)送數(shù)據(jù)獲得翻譯結(jié)果
上一篇內(nèi)容,已經(jīng)學(xué)會(huì)了使用簡(jiǎn)單的語(yǔ)句對(duì)網(wǎng)頁(yè)進(jìn)行抓取。接下來(lái),詳細(xì)看下urlopen的兩個(gè)重要參數(shù)url和data,學(xué)習(xí)如何發(fā)送數(shù)據(jù)data
一、urlopen的url參數(shù) Agent
url不僅可以是一個(gè)字符串,例如:http://www.baidu.com。url也可以是一個(gè)Request對(duì)象,這就需要我們先定義一個(gè)Request對(duì)象,然后將這個(gè)Request對(duì)象作為urlopen的參數(shù)使用,方法如下:
# -*- 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)
同樣,運(yùn)行這段代碼同樣可以得到網(wǎng)頁(yè)信息。可以看一下這段代碼和上個(gè)筆記中代碼的不同,對(duì)比一下就明白了。
urlopen()返回的對(duì)象,可以使用read()進(jìn)行讀取,同樣也可以使用geturl()方法、info()方法、getcode()方法。
geturl()返回的是一個(gè)url的字符串;
info()返回的是一些meta標(biāo)記的元信息,包括一些服務(wù)器的信息;
getcode()返回的是HTTP的狀態(tài)碼,如果返回200表示請(qǐng)求成功。
關(guān)于META標(biāo)簽和HTTP狀態(tài)碼的內(nèi)容可以自行百度百科,里面有很詳細(xì)的介紹。
了解到這些,我們就可以進(jìn)行新一輪的測(cè)試,新建文件名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()))
可以得到如下運(yùn)行結(jié)果:
二、urlopen的data參數(shù)
我們可以使用data參數(shù),向服務(wù)器發(fā)送數(shù)據(jù)。根據(jù)HTTP規(guī)范,GET用于信息獲取,POST是向服務(wù)器提交數(shù)據(jù)的一種請(qǐng)求,再換句話說(shuō):
從客戶端向服務(wù)器提交數(shù)據(jù)使用POST;
從服務(wù)器獲得數(shù)據(jù)到客戶端使用GET(GET也可以提交,暫不考慮)。
如果沒(méi)有設(shè)置urlopen()函數(shù)的data參數(shù),HTTP請(qǐng)求采用GET方式,也就是我們從服務(wù)器獲取信息,如果我們?cè)O(shè)置data參數(shù),HTTP請(qǐng)求采用POST方式,也就是我們向服務(wù)器傳遞數(shù)據(jù)。
data參數(shù)有自己的格式,它是一個(gè)基于application/x-www.form-urlencoded的格式,具體格式我們不用了解, 因?yàn)槲覀兛梢允褂胾rllib.parse.urlencode()函數(shù)將字符串自動(dòng)轉(zhuǎn)換成上面所說(shuō)的格式。
三、發(fā)送data實(shí)例
向有道翻譯發(fā)送data,得到翻譯結(jié)果。
1.打開有道翻譯界面,如下圖所示:
2.鼠標(biāo)右鍵檢查,也就是審查元素,如下圖所示:
3.選擇右側(cè)出現(xiàn)的Network,如下圖所示:
4.在左側(cè)輸入翻譯內(nèi)容,輸入Jack,如下圖所示:
5.點(diǎn)擊自動(dòng)翻譯按鈕,我們就可以看到右側(cè)出現(xiàn)的內(nèi)容,如下圖所示:
6.點(diǎn)擊上圖紅框中的內(nèi)容,查看它的信息,如下圖所示:
7.記住這些信息,這是我們一會(huì)兒寫程序需要用到的。
新建文件translate_test.py,編寫如下代碼:
# -*- coding: UTF-8 -*- from urllib import request from urllib import parse import json if __name__ == "__main__": #對(duì)應(yīng)上圖的Request URL Request_URL = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=https://www.baidu.com/link' #創(chuàng)建Form_Data字典,存儲(chǔ)上圖的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方法轉(zhuǎn)換標(biāo)準(zhǔn)格式 data = parse.urlencode(Form_Data).encode('utf-8') #傳遞Request對(duì)象和轉(zhuǎn)換完格式的數(shù)據(jù) response = request.urlopen(Request_URL,data) #讀取信息并解碼 html = response.read().decode('utf-8') #使用JSON translate_results = json.loads(html) #找到翻譯結(jié)果 translate_results = translate_results['translateResult'][0][0]['tgt'] #打印翻譯信息 print("翻譯的結(jié)果是:%s" % translate_results)
這樣我們就可以查看翻譯的結(jié)果了,如下圖所示:
JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,我們需要從爬取到的內(nèi)容中找到JSON格式的數(shù)據(jù),這里面保存著我們想要的翻譯結(jié)果,再將得到的JSON格式的翻譯結(jié)果進(jìn)行解析,得到我們最終想要的樣子:杰克。
以上所述是小編給大家介紹的Python3網(wǎng)絡(luò)爬蟲(二):利用urllib.urlopen向有道翻譯發(fā)送數(shù)據(jù)獲得翻譯結(jié)果詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Python udp網(wǎng)絡(luò)程序?qū)崿F(xiàn)發(fā)送、接收數(shù)據(jù)功能示例
- Python大數(shù)據(jù)之網(wǎng)絡(luò)爬蟲的post請(qǐng)求、get請(qǐng)求區(qū)別實(shí)例分析
- Python 網(wǎng)絡(luò)編程之UDP發(fā)送接收數(shù)據(jù)功能示例【基于socket套接字】
- Python下載網(wǎng)絡(luò)文本數(shù)據(jù)到本地內(nèi)存的四種實(shí)現(xiàn)方法示例
- Python爬蟲實(shí)例_城市公交網(wǎng)絡(luò)站點(diǎn)數(shù)據(jù)的爬取方法
- python網(wǎng)絡(luò)編程調(diào)用recv函數(shù)完整接收數(shù)據(jù)的三種方法
- python網(wǎng)絡(luò)編程之?dāng)?shù)據(jù)傳輸U(kuò)DP實(shí)例分析
- python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(九):數(shù)據(jù)庫(kù)客戶端 DB-API
- python如何獲取網(wǎng)絡(luò)數(shù)據(jù)
相關(guān)文章
如何取消pyecharts繪制地圖時(shí)默認(rèn)顯示小圓點(diǎn)標(biāo)識(shí)
這篇文章主要介紹了如何取消pyecharts繪制地圖時(shí)默認(rèn)顯示小圓點(diǎn)標(biāo)識(shí),文章內(nèi)容介紹詳細(xì)具有一定的參考價(jià)值?需要的小伙伴可以參考一下2022-04-04Python實(shí)現(xiàn)個(gè)人微信號(hào)自動(dòng)監(jiān)控告警的示例
今天小編就為大家分享一篇Python實(shí)現(xiàn)個(gè)人微信號(hào)自動(dòng)監(jiān)控告警的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07詳解Python 定時(shí)框架 Apscheduler原理及安裝過(guò)程
Apscheduler是一個(gè)非常強(qiáng)大且易用的類庫(kù),可以方便我們快速的搭建一些強(qiáng)大的定時(shí)任務(wù)或者定時(shí)監(jiān)控類的調(diào)度系統(tǒng),這篇文章主要介紹了Python 定時(shí)框架 Apscheduler ,需要的朋友可以參考下2019-06-06Python語(yǔ)法糖遍歷列表時(shí)刪除元素方法示例詳解
這篇文章主要為大家介紹了Python語(yǔ)法糖遍歷列表時(shí)刪除元素詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05Python的Flask框架與數(shù)據(jù)庫(kù)連接的教程
這篇文章主要介紹了Python的Flask框架與數(shù)據(jù)庫(kù)連接的教程,是Flask框架學(xué)習(xí)當(dāng)中的基本知識(shí),需要的朋友可以參考下2015-04-04Python中初始化一個(gè)二維數(shù)組及注意事項(xiàng)說(shuō)明
這篇文章主要介紹了Python中初始化一個(gè)二維數(shù)組及注意事項(xiàng)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08python logging 日志的級(jí)別調(diào)整方式
今天小編就為大家分享一篇python logging 日志的級(jí)別調(diào)整方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02Pytest?fixture及conftest相關(guān)詳解
這篇文章主要介紹了Pytest?fixture及conftest相關(guān)詳解,fixture是在測(cè)試函數(shù)運(yùn)行前后,由pytest執(zhí)行的外殼函數(shù),更多相關(guān)內(nèi)容需要的朋友可以參考一下2022-09-09pytorch 中nn.Dropout的使用說(shuō)明
這篇文章主要介紹了pytorch 中nn.Dropout的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05