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