Python爬蟲入門之Urllib庫的基本使用

參考了一些文章,簡單寫一下urllib庫的基本使用:

1.簡單的拔取一個百度網(wǎng)頁

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

把這幾行代碼保存成 demo.py,進入該文件的目錄,執(zhí)行如下命令查看運行結果凳干,感受一下衰琐。
cmd下執(zhí)行 python demo.py

你將會在命令窗口看到HTML代碼被你完全扒了下來

2.我們來進行分析扒網(wǎng)頁
來看這兩行代碼,第一行
response = urllib2.urlopen("http://www.baidu.com")

首先我們調用的是urllib2庫里面的urlopen方法垛吗,傳入一個URL织堂,這個網(wǎng)址是百度首頁叠艳,協(xié)議是HTTP協(xié)議,當然你也可以把HTTP換做FTP,FILE,HTTPS 等等易阳,只是代表了一種訪問控制協(xié)議附较,urlopen一般接受三個參數(shù),它的參數(shù)如下:
urlopen(url, data, timeout)

第一個參數(shù)url即為URL潦俺,第二個參數(shù)data是訪問URL時要傳送的數(shù)據(jù)拒课,第三個timeout是設置超時時間。
第二三個參數(shù)是可以不傳送的事示,data默認為空None早像,timeout默認為 socket._GLOBAL_DEFAULT_TIMEOUT
第一個參數(shù)URL是必須要傳送的,在這個例子里面我們傳送了百度的URL肖爵,執(zhí)行urlopen方法之后卢鹦,返回一個response對象,返回信息便保存在這里面劝堪。

print response.read()

response對象有一個read方法冀自,可以返回獲取到的網(wǎng)頁內容。

3.構造Requset
上面的urlopen參數(shù)可以傳入一個request請求,它是一個Request類的實例秒啦,構造時需要傳入Url,Data等等的內容熬粗。比如上面的兩行代碼,我們可以這么改寫

import urllib2
request = urllib2.Request("http://www.baidu.com")
response = urllib2.urlopen(request)
print response.read()

運行結果是完全一樣的帝蒿,只不過中間多了一個request對象,推薦大家這么寫巷怜,因為在構建請求時還需要加入好多內容葛超,通過構建一個request,服務器響應請求得到應答延塑,這樣顯得邏輯上清晰明確绣张。

4.POST和GET數(shù)據(jù)傳送
上面的程序演示了最基本的網(wǎng)頁抓取,不過关带,現(xiàn)在大多數(shù)網(wǎng)站都是動態(tài)網(wǎng)頁侥涵,需要你動態(tài)地傳遞參數(shù)給它沼撕,它做出對應的響應。所以芜飘,在訪問時务豺,我們需要傳遞數(shù)據(jù)給它。最常見的情況是什么嗦明?對了笼沥,就是登錄注冊的時候呀。
把數(shù)據(jù)用戶名和密碼傳送到一個URL娶牌,然后你得到服務器處理之后的響應奔浅,這個該怎么辦?下面讓我來為小伙伴們揭曉吧诗良!
數(shù)據(jù)傳送分為POST和GET兩種方式汹桦,兩種方式有什么區(qū)別呢?
最重要的區(qū)別是GET方式是直接以鏈接形式訪問鉴裹,鏈接中包含了所有的參數(shù)舞骆,當然如果包含了密碼的話是一種不安全的選擇,不過你可以直觀地看到自己提交了什么內容壹罚。POST則不會在網(wǎng)址上顯示所有的參數(shù)葛作,不過如果你想直接查看提交了什么就不太方便了,大家可以酌情選擇猖凛。
POST方式:

the code:

import urllib
import urllib2
values = {"username":"1554896963@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庫赂蠢,現(xiàn)在我們模擬登陸CSDN,當然上述代碼可能登陸不進去辨泳,因為還要做一些設置頭部header的工作虱岂,或者還有一些參數(shù)沒有設置全,還沒有提及到在此就不寫上去了菠红,在此只是說明登錄的原理第岖。我們需要定義一個字典,名字為values试溯,參數(shù)我設置了username和password蔑滓,下面利用urllib的urlencode方法將字典編碼,命名為data遇绞,構建request時傳入兩個參數(shù)键袱,url和data,運行程序摹闽,即可實現(xiàn)登陸蹄咖,返回的便是登陸后呈現(xiàn)的頁面內容。當然你可以自己搭建一個服務器來測試一下付鹿。
注意上面字典的定義方式還有一種澜汤,下面的寫法是等價的

the code:

import urllib
import urllib2

values = {}
values['username'] = "1554896963@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()

以上方法便實現(xiàn)了POST方式的傳送
GET方式:
至于GET方式我們可以直接把參數(shù)寫到網(wǎng)址上面蚜迅,直接構建一個帶參數(shù)的URL出來即可。

the code:

import urllib
import urllib2
values={}
values['username'] = "1554896963@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()

本文參考該文章俊抵,大部分轉自此文內容 http://cuiqingcai.com/947.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末谁不,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子务蝠,更是在濱河造成了極大的恐慌拍谐,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件馏段,死亡現(xiàn)場離奇詭異轩拨,居然都是意外死亡,警方通過查閱死者的電腦和手機院喜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門亡蓉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人喷舀,你說我怎么就攤上這事砍濒。” “怎么了硫麻?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵爸邢,是天一觀的道長。 經(jīng)常有香客問我拿愧,道長杠河,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任浇辜,我火速辦了婚禮券敌,結果婚禮上,老公的妹妹穿的比我還像新娘柳洋。我一直安慰自己待诅,他們只是感情好,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布熊镣。 她就那樣靜靜地躺著卑雁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绪囱。 梳的紋絲不亂的頭發(fā)上测蹲,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音毕箍,去河邊找鬼弛房。 笑死道盏,一個胖子當著我的面吹牛而柑,可吹牛的內容都是我干的文捶。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼媒咳,長吁一口氣:“原來是場噩夢啊……” “哼粹排!你這毒婦竟也來了?” 一聲冷哼從身側響起涩澡,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤顽耳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后妙同,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體射富,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年粥帚,在試婚紗的時候發(fā)現(xiàn)自己被綠了胰耗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡芒涡,死狀恐怖柴灯,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情费尽,我是刑警寧澤赠群,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站旱幼,受9級特大地震影響查描,放射性物質發(fā)生泄漏。R本人自食惡果不足惜速警,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一叹誉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧闷旧,春花似錦长豁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至该园,卻和暖如春酸舍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背里初。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工啃勉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人双妨。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓淮阐,卻偏偏與公主長得像叮阅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子泣特,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內容