python爬蟲第1章 urllib庫(kù)(二) urllib發(fā)送post請(qǐng)求

python爬蟲第1章 urllib庫(kù)(二) urllib發(fā)送post請(qǐng)求

一星持、構(gòu)建請(qǐng)求對(duì)象Request

先看看python urllib默認(rèn)的請(qǐng)求頭:

import urllib.request

url = r"http://www.baidu.com"

response = urllib.request.urlopen(url)

print(response.read())

執(zhí)行上面代碼宋渔,使用Charles抓包:

GET / HTTP/1.1
Accept-Encoding identity
Host www.baidu.com
User-Agent Python-urllib/3.6
Connection close

User-Agent : Python-urllib/3.6 這是一點(diǎn)偽裝都沒有州疾,直接告訴服務(wù)器自己是python程序。服務(wù)器響不響應(yīng)數(shù)據(jù)那就很難說了皇拣。

那該怎么辦严蓖?需要偽裝自己的User-Agent(UA),讓服務(wù)器以為瀏覽器上網(wǎng)审磁。

構(gòu)建請(qǐng)求對(duì)象:urllib.request.Request (這是一個(gè)類)

import urllib.request
import ssl

def crawle(url):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.3.4000 Chrome/30.0.1599.101 Safari/537.36"
    }
    request = urllib.request.Request(url = url , headers = headers)

    # 使用ssl創(chuàng)建未驗(yàn)證的上下文
    # 必須要有這個(gè)參數(shù)谈飒,否則無法爬取https網(wǎng)頁
    # 如果不加,報(bào)錯(cuò):urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)>
    context = ssl._create_unverified_context()

    response = urllib.request.urlopen(request , context = context)

    print(response.read().decode())

url = r"https://www.jd.com/"

crawle(url)

再次抓包:

GET / HTTP/1.1
Accept-Encoding identity
Host www.jd.com
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.3.4000 Chrome/30.0.1599.101 Safari/537.36
Connection close

二态蒂、POST請(qǐng)求案例:使用百度翻譯的sug接口查詢英語單詞

如何獲取這個(gè)接口杭措?瀏覽器打開https://fanyi.baidu.com/頁面,點(diǎn)擊F12鍵盤打開開發(fā)者工具钾恢,在頁面的輸入框輸入文字手素,如cat,就可以在開發(fā)者工具的Network中看到發(fā)送的請(qǐng)求瘩蚪。

import urllib.request
import urllib.parse

# 百度翻譯post請(qǐng)求的url
post_url = r"https://fanyi.baidu.com/sug"

word = input("請(qǐng)輸入需要搜索的英文單詞...")

form_data = {
    "kw":word
}

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
}

# 對(duì)post參數(shù)進(jìn)行url編碼
# 必須是字節(jié)類型泉懦,否則報(bào)錯(cuò):TypeError: POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type str.
form_data = urllib.parse.urlencode(form_data).encode()

# 傳入url、請(qǐng)求頭構(gòu)建Request對(duì)象
request = urllib.request.Request(url = post_url,headers=headers)

# 發(fā)送post請(qǐng)求
response = urllib.request.urlopen(request,data=form_data)

print(response.read().decode())

獲取到了 unicode

{"errno":0,"data":[{"k":"cat","v":"n. \u732b; \u732b\u79d1\u52a8\u7269;"},{"k":"catch","v":"v. \u63a5\u4f4f; \u622a\u4f4f; \u62e6\u4f4f; \u63a5(\u843d\u4e0b\u7684\u6db2\u4f53); \u6293\u4f4f; \u63e1\u4f4f; n. \u63a5(\u7403\u7b49); \u603b\u6355\u83b7\u91cf; \u6263"},{"k":"category","v":"n. (\u4eba\u6216\u4e8b\u7269\u7684)\u7c7b\u522b\uff0c\u79cd\u7c7b;"},{"k":"cattle","v":"n. \u725b;"},{"k":"categories","v":"n. (\u4eba\u6216\u4e8b\u7269\u7684)\u7c7b\u522b\uff0c\u79cd\u7c7b;  category\u7684\u590d\u6570;"}]}

unicode轉(zhuǎn)字符串后(可以在一些json格式轉(zhuǎn)化的網(wǎng)站進(jìn)行unicode轉(zhuǎn)字符串疹瘦,如http://www.bejson.com/):

{
    "errno": 0,
    "data": [{
        "k": "cat",
        "v": "n. 貓; 貓科動(dòng)物;"
    }, {
        "k": "catch",
        "v": "v. 接住; 截住; 攔住; 接(落下的液體); 抓住; 握住; n. 接(球等); 總捕獲量; 扣"
    }, {
        "k": "category",
        "v": "n. (人或事物的)類別崩哩,種類;"
    }, {
        "k": "cattle",
        "v": "n. 牛;"
    }, {
        "k": "categories",
        "v": "n. (人或事物的)類別,種類;  category的復(fù)數(shù);"
    }]
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末言沐,一起剝皮案震驚了整個(gè)濱河市邓嘹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌险胰,老刑警劉巖汹押,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異起便,居然都是意外死亡棚贾,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門榆综,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妙痹,“玉大人,你說我怎么就攤上這事鼻疮∠钢睿” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵陋守,是天一觀的道長(zhǎng)震贵。 經(jīng)常有香客問我,道長(zhǎng)水评,這世上最難降的妖魔是什么猩系? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮中燥,結(jié)果婚禮上寇甸,老公的妹妹穿的比我還像新娘。我一直安慰自己疗涉,他們只是感情好拿霉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著咱扣,像睡著了一般绽淘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上闹伪,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天沪铭,我揣著相機(jī)與錄音,去河邊找鬼偏瓤。 笑死杀怠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的厅克。 我是一名探鬼主播赔退,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼证舟!你這毒婦竟也來了硕旗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤褪储,失蹤者是張志新(化名)和其女友劉穎卵渴,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鲤竹,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浪读,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辛藻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碘橘。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖吱肌,靈堂內(nèi)的尸體忽然破棺而出痘拆,到底是詐尸還是另有隱情,我是刑警寧澤氮墨,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布纺蛆,位于F島的核電站吐葵,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏桥氏。R本人自食惡果不足惜温峭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望字支。 院中可真熱鬧凤藏,春花似錦、人聲如沸堕伪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽欠雌。三九已至蹄梢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間桨昙,已是汗流浹背检号。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛙酪,地道東北人齐苛。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像桂塞,于是被迫代替她去往敵國(guó)和親凹蜂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容