快使用Ctrl+D收藏本站!如果本站的文章以及資源有幫助到您,希望您能贊助本站服務器費用,感謝您的支持!本站開放注冊,現邀請您一起分享技術心得!您可以-注冊-

Python3.6爬蟲入門自學教程之七:cookies的使用及基本說明

Python爬蟲 Julius_wen 736℃ 0評論

1.Cookie簡介

天津11选5开奖结果查询结果 www.mwexpn.com.cn 基于 Internet的各種服務系統應運而生,建立商業站點或者功能比較完善的個人站點,常常需要記錄訪問者的一些信息;論壇作為 Internet發展的產物之一,在 Internet 中發揮著越來越重要的作用,是用戶獲取、交流、傳遞信息的主要場所之一,論壇常常也需要記錄訪問者的一些基本信息(如身份識別號碼、密碼、用戶在 Web 站點購物的方式或用戶訪問該站點的次數)。目前公認的是,通過 Cookie 和 Session 技術來實現記錄訪問者的一些基本信息——百度百科

cookies簡單來說就是服務器端網站,是為了提高網站安全性而做的一種方案。一般來說,登陸到網站都需要進行cookie驗證,而有的網站上的內容需要我們登陸后才能抓取查看。所以我們在使用python編寫爬蟲的時候,在登陸的時候就需要記錄下cookie信息。然后再進行登陸,就天津11选5开奖结果查询结果了。

2.python3.6中的opener

The OpenerDirector class opens URLs via BaseHandlers chained together. It manages the chaining of handlers, and recovery from errors.

這個類是用來打開URL鏈接的,我們前面用到的urlopen這個方法,實際上可以理解成opener的特殊實例對象。傳入的參數僅僅是url,data,timeout。而我們要使用cookie的話,這個方法就沒有這個功能了,必須使用opener對象,來打開url。下面這行代碼是用來build構建一個opener對象的,傳入的proHandler參數,具體類型可以在下面這個鏈接里查看:https://docs.python.org/3.6/library/urllib.request.html

urllib.request.build_opener([handler, ])

Return an OpenerDirector instance, which chains the handlers in the order given. handlers can be either instances of BaseHandler, or subclasses of BaseHandler (in which case it must be possible to call the constructor without any parameters).

返回一個OpenerDirector實例,它按照給定的順序鏈接處理程序。處理程序可以是基類處理程序的實例,也可以是基類處理程序的子類(在這種情況下,必須調用構造函數而不需要任何參數)。

這3行代碼,上面兩行是獲取cookie實例的,我們在下面第3部分進行講解。第三行是構建opener實例對象。構建完對象,我們就可以使用這個對象的方法了。咱們還打開這個鏈接:https://docs.python.org/3.6/library/urllib.request.html。然后下拉找到:21.6.2. OpenerDirector Objects。這里有這個對象的方法:

OpenerDirector.open(url, data=None[, timeout])

Open the given url (which can be a request object or a string), optionally passing the given data. Arguments, return values and exceptions raised are the same as those of urlopen() (which simply calls the open() method on the currently installed global OpenerDirector). The optional timeout parameter specifies a timeout in seconds for blocking operations like the connection attempt (if not specified, the global default timeout setting will be used). The timeout feature actually works only for HTTP, HTTPS and FTP connections).

這里就能看到,urlopen()這個方法是opener實例.open()方法簡化版。這些資料在上面的鏈接中都能查到,很方便。關于這個opener的實例方法還有另外兩個OpenerDirector.add_handler(handler)和OpenerDirector.error(proto, *args)具體信息大家自己去看吧。

 

天津11选5开奖结果查询结果

在python3.6中,cookie的存儲是由import http.cookiejar這個??榭飫锏姆椒ㄊ迪值?。大家打開上面帶大家看的網頁,然后找到21.24. http.cookiejar — Cookie handling for HTTP clients,這個??樽鷗涸餭ookie相關內容的。https://docs.python.org/3.6/library/http.cookiejar.html

The http.cookiejar module defines classes for automatic handling of HTTP cookies. It is useful for accessing web sites that require small pieces of data – cookies – to be set on the client machine by an HTTP response from a web server, and then returned to the server in later HTTP requests.

這個??槎ㄒ辶俗遠鞨TTP cookies的類。通過訪問Web服務器上的HTTP響應,這對于很多網站來說非常有用。網站服務器可以將需要的cookies數據,通過HTTP響應的方式設置到客戶端設備上,這樣在后期的http請求服務中,就可以使用這個cookies信息進行身份認證。

大家打開的這網頁,還有其他的關于cookies的類,比如http.cookiejar.FileCookieJar(filename, delayload=None, policy=None),然后是FileCookieJar的子類: http.cookiejar.MozillaCookieJar(filename, delayload=None, policy=None)和class http.cookiejar.LWPCookieJar(filename, delayload=None, policy=None)。這部分內容在這里:https://docs.python.org/3.6/library/http.cookiejar.html#file-cookie-jar-classes

CookieJar —-派生—->FileCookieJar ?—-派生—–>MozillaCookieJar(保存文件格式為txt)和LWPCookieJar(這個類是兼容libwww-perl系統庫的格式的,在上面的鏈接中也有說明)

1.獲取Cookie保存到變量

python3.6將python2.7內的urllib2庫合并到了urllib庫下,所以這部分寫法和python2.7的寫法略有不同。

下面是打印出來的cookies信息:

打開python標準庫文件鏈接,然后查看http.cookiejar.CookieJar類的相關說明如下

class http.cookiejar.CookieJar(policy=None)

policy is an object implementing the CookiePolicy interface.

The CookieJar class stores HTTP cookies. It extracts cookies from HTTP requests, and returns them in HTTP responses. CookieJar instances automatically expire contained cookies when necessary. Subclasses are also responsible for storing and retrieving cookies from a file or database.

從官方的標準庫說明中,我們可以看到http.cookiejar.CookieJar,是專門用來保存http cookies的??突Ф送ü鼿TTP request請求來表明自己需要獲取cookies信息,然后服務器端根據請求響應在HTTP的 response響應頭中返回需要的cookies信息。調用這個類的方法,我們就能獲得cookie信息?;袢〉絚ookie信息后,需要使用HTTPCookieProcessor進行處理。處理完成即可使用opener進行訪問

class urllib.request.HTTPCookieProcessor(cookiejar=None)

A class to handle HTTP Cookies.

 

這個英文引用也是官方原文的,在上文中提到的鏈接中,查找這個類。

這里補充一下https的小知識,具體內容大家自己百度查看別的博客吧

HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。 它是一個URI scheme(抽象標識符體系),句法類同http:體系。用于安全的HTTP數據傳輸。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默認端口及一個加密/身份驗證層(在HTTP與TCP之間)。這個系統的最初研發由網景公司(Netscape)進行,并內置于其瀏覽器Netscape Navigator中,提供了身份驗證與加密通訊方法。現在它被廣泛用于萬維網上安全敏感的通訊,例如交易支付方面。

2.獲取Cookie保存到文件

ignore_discard的意思是即使cookies將被丟棄也將它保存下來,ignore_expires的意思是如果在該文件中cookies已經存在,則覆蓋原文件寫入,在這里,我們將這兩個全部設置為True。運行之后,cookies將被保存到cookie.txt文件中。運行成功之后,然后打開本工程所在目錄,就能找到生成的cookie.txt文件。我們打開cookie.txt文件,其內容如下:

這樣我們就保存成功了cookie文件。下面我們將分析一下MozillaCookieJar,打開鏈接:https://docs.python.org/3.6/library/http.cookiejar.html#file-cookie-jar-classes

class http.cookiejar.MozillaCookieJar(filename, delayload=None, policy=None)

A FileCookieJar that can load from and save cookies to disk in the Mozilla cookies.txt file format (which is also used by the Lynx and Netscape browsers).

 

這個類是FileCookieJar的子類,通過這個類的方法,可以實現cookie的保存。cookie文件格式為txt。這個類可以使用save方法保存cookie到文件,也可以使用load方法,將cookie載出使用。

FileCookieJar.save(filename=None, ignore_discard=False, ignore_expires=False)

Save cookies to a file.

? FileCookieJar.load(filename=None, ignore_discard=False, ignore_expires=False)Load cookies from a file.

3.從文件訪問cookie并訪問

這里我新建了一個文件夾,然后將上面獲得的cookie.txt文件拷到了當前工程下,如果沒有拷貝會報如下錯誤:

天津11选5开奖结果查询结果

運行結果如下:代表我們成功載入cookie并成功連接網站:

4.升級登陸CSDN的代碼

天津11选5开奖结果查询结果

4.本篇小結

本篇博文,總結了cookie的基本用法,同時介紹了opener類。下一篇博文將為大家介紹http響應碼的錯誤類型。為大家介紹HTTPError這個類,同時和大家一起學習如何處理這類錯誤。

 

 

轉載請注明:天津11选5开奖结果查询结果 » Python3.6爬蟲入門自學教程之七:cookies的使用及基本說明

贊賞作者

微信贊賞支付寶贊賞

喜歡 (1)or分享 (0)

如果您喜歡本站文章,感覺本站的資源對您有幫助,請狠狠點擊下面

每累計贊助40元,即可讓本站按最低配置運行一個月,感謝您的支持!

發表我的評論
取消評論

表情

Hi,您需要填寫昵稱和郵箱!

  • 昵稱 (必填)
  • 郵箱 (必填)
  • 網址