Python爬蟲入門三之Urllib庫(kù)的基本使用

urlopen(url, data, timeout) 1.分分鐘扒一個(gè)網(wǎng)頁(yè)下來(lái)

怎樣扒網(wǎng)頁(yè)呢?其實(shí)就是根據(jù)URL來(lái)獲取它的網(wǎng)頁(yè)信息,雖然我們?cè)跒g覽器中看到的是一幅幅優(yōu)美的畫面踪区,但是其實(shí)是由瀏覽器解釋才呈現(xiàn)出來(lái)的落萎,實(shí)質(zhì)它是一段HTML代碼锄禽,加 JS、CSS嘿般,如果把網(wǎng)頁(yè)比作一個(gè)人,那么HTML便是他的骨架涯冠,JS便是他的肌肉炉奴,CSS便是它的衣服。所以最重要的部分是存在于HTML中的功偿,下面我們就寫個(gè)例子來(lái)扒一個(gè)網(wǎng)頁(yè)下來(lái)盆佣。

import urllib2

response = urllib2.urlopen("http://www.baidu.com")

print response.read()

是的你沒看錯(cuò),真正的程序就兩行械荷,把它保存成 demo.py共耍,進(jìn)入該文件的目錄,執(zhí)行如下命令查看運(yùn)行結(jié)果吨瞎,感受一下痹兜。

python demo.py


看,這個(gè)網(wǎng)頁(yè)的源碼已經(jīng)被我們扒下來(lái)了颤诀,是不是很酸爽字旭?

2.分析扒網(wǎng)頁(yè)的方法

那么我們來(lái)分析這兩行代碼,第一行

response = urllib2.urlopen("http://www.baidu.com")

首先我們調(diào)用的是urllib2庫(kù)里面的urlopen方法崖叫,傳入一個(gè)URL遗淳,這個(gè)網(wǎng)址是百度首頁(yè),協(xié)議是HTTP協(xié)議心傀,當(dāng)然你也可以把HTTP換做FTP,FILE,HTTPS 等等屈暗,只是代表了一種訪問(wèn)控制協(xié)議,urlopen一般接受三個(gè)參數(shù)脂男,它的參數(shù)如下:

urlopen(url, data, timeout)

第一個(gè)參數(shù)url即為URL养叛,第二個(gè)參數(shù)data是訪問(wèn)URL時(shí)要傳送的數(shù)據(jù),第三個(gè)timeout是設(shè)置超時(shí)時(shí)間宰翅。

第二三個(gè)參數(shù)是可以不傳送的弃甥,data默認(rèn)為空None,timeout默認(rèn)為?socket._GLOBAL_DEFAULT_TIMEOUT

第一個(gè)參數(shù)URL是必須要傳送的汁讼,在這個(gè)例子里面我們傳送了百度的URL淆攻,執(zhí)行urlopen方法之后,返回一個(gè)response對(duì)象嘿架,返回信息便保存在這里面卜录。

print response.read()

response對(duì)象有一個(gè)read方法,可以返回獲取到的網(wǎng)頁(yè)內(nèi)容眶明。

如果不加read直接打印會(huì)是什么?答案如下:


直接打印出了該對(duì)象的描述筐高,所以記得一定要加read方法搜囱,否則它不出來(lái)內(nèi)容可就不怪我咯丑瞧!

3.構(gòu)造Request

其實(shí)上面的urlopen參數(shù)可以傳入一個(gè)request請(qǐng)求,它其實(shí)就是一個(gè)Request類的實(shí)例,構(gòu)造時(shí)需要傳入U(xiǎn)rl,Data等等的內(nèi)容蜀肘。比如上面的兩行代碼绊汹,我們可以這么改寫

import urllib2

request = urllib2.Request("http://www.baidu.com")

response = urllib2.urlopen(request)

print response.read()


運(yùn)行結(jié)果是完全一樣的,只不過(guò)中間多了一個(gè)request對(duì)象扮宠,推薦大家這么寫西乖,因?yàn)樵跇?gòu)建請(qǐng)求時(shí)還需要加入好多內(nèi)容,通過(guò)構(gòu)建一個(gè)request坛增,服務(wù)器響應(yīng)請(qǐng)求得到應(yīng)答获雕,這樣顯得邏輯上清晰明確。

4.POST和GET數(shù)據(jù)傳送

上面的程序演示了最基本的網(wǎng)頁(yè)抓取收捣,不過(guò)届案,現(xiàn)在大多數(shù)網(wǎng)站都是動(dòng)態(tài)網(wǎng)頁(yè),需要你動(dòng)態(tài)地傳遞參數(shù)給它罢艾,它做出對(duì)應(yīng)的響應(yīng)楣颠。所以,在訪問(wèn)時(shí)咐蚯,我們需要傳遞數(shù)據(jù)給它童漩。最常見的情況是什么?對(duì)了春锋,就是登錄注冊(cè)的時(shí)候呀矫膨。

把數(shù)據(jù)用戶名和密碼傳送到一個(gè)URL,然后你得到服務(wù)器處理之后的響應(yīng)看疙,這個(gè)該怎么辦豆拨?下面讓我來(lái)為小伙伴們揭曉吧!

數(shù)據(jù)傳送分為POST和GET兩種方式能庆,兩種方式有什么區(qū)別呢施禾?

最重要的區(qū)別是GET方式是直接以鏈接形式訪問(wèn),鏈接中包含了所有的參數(shù)搁胆,當(dāng)然如果包含了密碼的話是一種不安全的選擇弥搞,不過(guò)你可以直觀地看到自己提交了什么內(nèi)容。POST則不會(huì)在網(wǎng)址上顯示所有的參數(shù)渠旁,不過(guò)如果你想直接查看提交了什么就不太方便了攀例,大家可以酌情選擇。

POST方式:

上面我們說(shuō)了data參數(shù)是干嘛的顾腊?對(duì)了粤铭,它就是用在這里的,我們傳送的數(shù)據(jù)就是這個(gè)參數(shù)data杂靶,下面演示一下POST方式梆惯。


import urllib

import urllib2

values = {"username":"1016903103@qq.com","password":"XXXX"}

data = urllib.urlencode(values)

url = "https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"

request = urllib2.Request(url,data)

response = urllib2.urlopen(request)

print response.read()

我們引入了urllib庫(kù)酱鸭,現(xiàn)在我們模擬登陸CSDN,當(dāng)然上述代碼可能登陸不進(jìn)去垛吗,因?yàn)镃SDN還有個(gè)流水號(hào)的字段凹髓,沒有設(shè)置全,比較復(fù)雜在這里就不寫上去了怯屉,在此只是說(shuō)明登錄的原理蔚舀。一般的登錄網(wǎng)站一般是這種寫法。

我們需要定義一個(gè)字典锨络,名字為values赌躺,參數(shù)我設(shè)置了username和password,下面利用urllib的urlencode方法將字典編碼足删,命名為data寿谴,構(gòu)建request時(shí)傳入兩個(gè)參數(shù),url和data失受,運(yùn)行程序讶泰,返回的便是POST后呈現(xiàn)的頁(yè)面內(nèi)容。

注意上面字典的定義方式還有一種拂到,下面的寫法是等價(jià)的


import urllib

import urllib2


values = {}

values['username'] = "1016903103@qq.com"

values['password'] = "XXXX"

data = urllib.urlencode(values)

url = "http://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"

request = urllib2.Request(url,data)

response = urllib2.urlopen(request)

print response.read()

以上方法便實(shí)現(xiàn)了POST方式的傳送

GET方式:

至于GET方式我們可以直接把參數(shù)寫到網(wǎng)址上面痪署,直接構(gòu)建一個(gè)帶參數(shù)的URL出來(lái)即可。

import urllib

import urllib2


values={}

values['username'] = "1016903103@qq.com"

values['password']="XXXX"

data = urllib.urlencode(values)

url = "http://passport.csdn.net/account/login"

geturl = url + "?"+data

request = urllib2.Request(geturl)

response = urllib2.urlopen(request)

print response.read()

你可以print geturl兄旬,打印輸出一下url狼犯,發(fā)現(xiàn)其實(shí)就是原來(lái)的url加?然后加編碼后的參數(shù)

http://passport.csdn.net/account/login?username=1016903103%40qq.com&password=XXXX

和我們平常GET訪問(wèn)方式一模一樣领铐,這樣就實(shí)現(xiàn)了數(shù)據(jù)的GET方式傳送悯森。

本節(jié)講解了一些基本使用,可以抓取到一些基本的網(wǎng)頁(yè)信息绪撵,小伙伴們加油瓢姻!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市音诈,隨后出現(xiàn)的幾起案子幻碱,更是在濱河造成了極大的恐慌,老刑警劉巖细溅,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件褥傍,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡喇聊,警方通過(guò)查閱死者的電腦和手機(jī)恍风,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人朋贬,你說(shuō)我怎么就攤上這事鸥咖。” “怎么了兄世?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)啊研。 經(jīng)常有香客問(wèn)我御滩,道長(zhǎng),這世上最難降的妖魔是什么党远? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任削解,我火速辦了婚禮,結(jié)果婚禮上沟娱,老公的妹妹穿的比我還像新娘氛驮。我一直安慰自己,他們只是感情好济似,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布矫废。 她就那樣靜靜地躺著剥槐,像睡著了一般秫逝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上玖院,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天台舱,我揣著相機(jī)與錄音律杠,去河邊找鬼。 笑死竞惋,一個(gè)胖子當(dāng)著我的面吹牛柜去,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拆宛,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼嗓奢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了胰挑?” 一聲冷哼從身側(cè)響起蔓罚,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瞻颂,沒想到半個(gè)月后豺谈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贡这,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年茬末,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡丽惭,死狀恐怖击奶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情责掏,我是刑警寧澤柜砾,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站换衬,受9級(jí)特大地震影響痰驱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瞳浦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一担映、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧叫潦,春花似錦蝇完、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至拔妥,卻和暖如春忿危,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背没龙。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工铺厨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人硬纤。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓解滓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親筝家。 傳聞我的和親對(duì)象是個(gè)殘疾皇子洼裤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

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