摘要:申明本系列文章借鑒了慕課網(wǎng)的課程,。慕課網(wǎng)是一個(gè)非常贊的學(xué)習(xí)網(wǎng)站。是下的一個(gè)模塊,在中,被拆分成和實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的下載器使用函數(shù)可以給服務(wù)器發(fā)送一個(gè)請(qǐng)求。該函數(shù)返回一個(gè)該返回的對(duì)象有三個(gè)額外的函數(shù)取得服務(wù)器返回的。默認(rèn)沒(méi)有的,請(qǐng)求方式為。
申明:本系列文章借鑒了慕課網(wǎng)的課程,http://www.imooc.com/learn/563。慕課網(wǎng)是一個(gè)非常贊的學(xué)習(xí)網(wǎng)站。
urllib2是python2.x下的一個(gè)模塊,在Python3.x中,urllib2被拆分成urllib.request和urllib.error.
實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的下載器使用urllib2.urlopen(url)函數(shù)可以給服務(wù)器發(fā)送一個(gè)請(qǐng)求。
該函數(shù)返回一個(gè)file-like object. 該返回的對(duì)象有三個(gè)額外的函數(shù):
geturl() 取得服務(wù)器返回的url。一般用來(lái)判斷是否需要重定向。
info() 獲取頁(yè)面的meta信息
getcode() 獲取響應(yīng)的http狀態(tài)碼
例如我們寫了一小段程序
import urllib2 response = urllib2.urlopen("http://www.baidu.com") print response.getcode() print response.info()
用來(lái)下載百度首頁(yè)的內(nèi)容。
構(gòu)造一個(gè)request對(duì)象urllib2.urlopen()函數(shù)不僅僅能接收一個(gè)url字符串,還能接收一個(gè)request對(duì)象。
我們可以在Request對(duì)象中添加數(shù)據(jù)和header。
import urllib2 request = urllib2.Request("https://www.zhihu.com/question/28593608/answer/141936198") request.add_header("User-Agent", "Mozilla/5.0") response = urllib2.urlopen(request) print response.read()Post請(qǐng)求方法和在請(qǐng)求中添加數(shù)據(jù)
上面的代碼是一個(gè)爬取知乎某一個(gè)回答的代碼。我們可以看到,我們并沒(méi)有在request中添加data。
urllib2 默認(rèn)沒(méi)有data的,請(qǐng)求方式為GET。
urllib2 如果添加了data,那么請(qǐng)求方式為POST。
例如:
import urllib values = { "name": "charlie", "age": 20, "gender": "male" } data = urllib.urlencode(values) request.add_data(data)
我們使用POST方式提交數(shù)據(jù)的時(shí)候,我們需要?jiǎng)?chuàng)建一個(gè)字典型數(shù)據(jù),并且用urllib.urlencode()函數(shù)將器編碼成字符串,并用Request.add_data()函數(shù)添加到request中。
cookie、https、Proxy、HttpRedirect實(shí)際情況中,往往比上面的更加復(fù)雜,例如很多網(wǎng)站會(huì)設(shè)置cookie、可以會(huì)使用https加密傳輸,可能會(huì)設(shè)置代理,會(huì)有重定向等。
如何要處理上面這些特殊的情境,那么我們則需要添加特殊的處理器。
HTTPCookieProcessor
ProxyHandler
HTTPHandler
HTTPRedirectHandler
構(gòu)造好上述對(duì)象后,需要運(yùn)用urllib2.build_opener()創(chuàng)建一個(gè)opener.
然后將opener安裝到urllib2中: urllib2.install_opener(opener)。
例如:
import urllib2 import cookielib cookie_jar = cookielib.CookieJar() cookie_processor = urllib2.HTTPCookieProcessor(cookiejar=cookie_jar) opener = urllib2.build_opener(cookie_processor) urllib2.install_opener(opener) response = urllib2.urlopen("http://www.baidu.com") for item in cookie_jar: print item.name, item.value
如上述代碼所示,我們先新建了一個(gè)CookieJar。CookieJar是一個(gè)內(nèi)存中保存cookie的對(duì)象。
然后我們構(gòu)造一個(gè)cookie的處理器——HTTPCookieProcessor。
然后我們?cè)诟鶕?jù)cookie處理器構(gòu)造一個(gè)opener。
opener我們可以理解成打開(kāi)網(wǎng)頁(yè)獲取response的東西。默認(rèn)的opener只能接收url、data或resquest等的一個(gè)opener。
如果我們想要獲得更加多的功能,那么我們就需要構(gòu)造一個(gè)有HttpCookieProcessor的opener。
更多關(guān)于urllib2的opener概念,可以閱讀一篇非常棒的文章:http://cuiqingcai.com/968.html
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/38384.html
摘要:趁著春節(jié),希望能寫一個(gè)小小的網(wǎng)絡(luò)爬蟲(chóng)框架。網(wǎng)頁(yè)下載器接收,將頁(yè)面內(nèi)容下來(lái)。可以定義一個(gè)表,定義兩個(gè)字段和緩存數(shù)據(jù)庫(kù)網(wǎng)頁(yè)下載器網(wǎng)頁(yè)下載器就是更具下載網(wǎng)頁(yè)內(nèi)容等。常見(jiàn)的網(wǎng)頁(yè)下載器有是官方的基礎(chǔ)模塊。 趁著春節(jié),希望能寫一個(gè)小小的網(wǎng)絡(luò)爬蟲(chóng)框架。先定一個(gè)小目標(biāo),希望能比較優(yōu)雅地將某個(gè)網(wǎng)站上的所有圖片爬下來(lái)。暫時(shí)先將這個(gè)爬蟲(chóng)的名字叫做Squirrel,小松鼠吧。 什么是爬蟲(chóng) 爬蟲(chóng)其實(shí)是一種從互聯(lián)...
摘要:發(fā)送請(qǐng)求方不希望被跟蹤。主要用來(lái)將偽裝成一個(gè)正常的瀏覽器。該字典就是說(shuō)是網(wǎng)絡(luò)協(xié)議名稱,是代理的。另外一般會(huì)明確指定資源存放的位置。意思是將現(xiàn)在提交的數(shù)據(jù)存放于下第篇。請(qǐng)求刪除某一個(gè)資源。向服務(wù)器提交數(shù)據(jù)。 前一個(gè)教程我們涉及到了urllib2的一些高級(jí)應(yīng)用。這一片文章我們來(lái)比較系統(tǒng)的介紹一下。 該篇教程參考了靜覓的博文:http://cuiqingcai.com/954.html。寫這...
摘要:設(shè)置和處理事實(shí)上,并不是所有發(fā)起的請(qǐng)求都能得到服務(wù)器的回應(yīng)。例如網(wǎng)絡(luò)無(wú)鏈接連接不到服務(wù)器鏈接不存在請(qǐng)求的方法不對(duì)等情況都會(huì)造成拋出錯(cuò)誤。上面說(shuō)到的出錯(cuò)就會(huì)拋出。用于處理相關(guān)的錯(cuò)誤。 urllib2的timeout timeout參數(shù)用于設(shè)置超時(shí)。我們?cè)谂廊∫恍╉憫?yīng)較慢的網(wǎng)站的時(shí)候,需要設(shè)置一個(gè)比較長(zhǎng)的超時(shí)時(shí)間。 response = urllib2.urlopen(request, t...
摘要:相當(dāng)于該用戶的檔案。上述的文字對(duì)機(jī)制描述的比較簡(jiǎn)單也并不一定完全正確。但是默認(rèn)的并不支持。中供我們使用的是。創(chuàng)建需要闖入一個(gè)存放的容器。即過(guò)期的也保存。目前博主只知道鏈接后帶的參數(shù)需要與相匹配。但是并不知道兩者具體的關(guān)系。 很多網(wǎng)站的資源需要用戶登錄之后才能獲取。我們一旦登錄后再訪問(wèn)其他被保護(hù)的資源的時(shí)候,就不再需要再次輸入賬號(hào)、密碼。那么網(wǎng)站是怎么辦到的呢?一般來(lái)說(shuō),用戶在登錄之后,...
摘要:在這之前,還是有必要對(duì)一些概念超輕量級(jí)反爬蟲(chóng)方案后端掘金前言爬蟲(chóng)和反爬蟲(chóng)日益成為每家公司的標(biāo)配系統(tǒng)。 爬蟲(chóng)修煉之道——從網(wǎng)頁(yè)中提取結(jié)構(gòu)化數(shù)據(jù)并保存(以爬取糗百文本板塊所有糗事為例) - 后端 - 掘金歡迎大家關(guān)注我的專題:爬蟲(chóng)修煉之道 上篇 爬蟲(chóng)修煉之道——編寫一個(gè)爬取多頁(yè)面的網(wǎng)絡(luò)爬蟲(chóng)主要講解了如何使用python編寫一個(gè)可以下載多頁(yè)面的爬蟲(chóng),如何將相對(duì)URL轉(zhuǎn)為絕對(duì)URL,如何限速,...
閱讀 1640·2021-10-25 09:46
閱讀 3235·2021-10-08 10:04
閱讀 2383·2021-09-06 15:00
閱讀 2784·2021-08-19 10:57
閱讀 2088·2019-08-30 11:03
閱讀 989·2019-08-30 11:00
閱讀 2390·2019-08-26 17:10
閱讀 3559·2019-08-26 13:36