urllib2使用總結


keywords:

  1. urllib2,BeautifulSoup,cookielib

 

題外話:
小弟是編程愛好者,各位看官輕拍。
最近在使用urllib2抓取網頁內容,在學習的過程中也查閱了不少資料,並從中收獲很多。在查閱資料的過程中,我發現大部分資料都是建立在對urllib2的熟悉基礎之上,程序的細節並未顧及到新手看到這份資料會產生怎樣的困惑。在接下來的內容中,我會寫到我碰到的疑問以及解決方法。如果你也碰到類似的困惑,希望給予你幫助。
一.urllib2簡介
urllib2提供一個基礎函數urlopen,通過向指定的URL發出請求來獲取數據。最簡單的形式就是

  1. import urllib2
  2. response=urllib2.urlopen('http://www.douban.com')
  3. html=response.read()

這個過程就是我們平時刷網頁的代碼表現形式,它基於請求-響應模型。

  1. response=urllib2.urlopen('http://www.douban.com')

實際上可以看作兩個步驟:
我們指定一個域名並發送請求
1.

  1. request=urllib2.request('http://www.douban.com')

接着服務端響應來自客戶端的請求
2.

  1. response=urllib2.urlopen(request)

也許你會注意到,我們平時除了刷網頁的操作,還有向網頁提交數據。這種提交數據的行為,urllib2會把它翻譯為:

  1. import urllib
  2. import urllib2
  3. url = 'http://www.douban.com'
  4. info = {'name' : 'Michael Foord',
  5.           'location' : 'Northampton'}
  6. data = urllib.urlencode(info)  #info 需要被編碼為urllib2能理解的格式,這里用到的是urllib
  7. req = urllib2.Request(url, data)
  8. response = urllib2.urlopen(req)
  9. the_page = response.read()

有時你會碰到,程序也對,但是服務器拒絕你的訪問。這是為什么呢?問題出在請求中的頭信息(header)。
有的服務端有潔癖,不喜歡程序來觸摸它。這個時候你需要將你的程序偽裝成瀏覽器來發出請求。請求的方式就包含在header中。
常見的情形:

  1. import urllib
  2. import urllib2
  3. url = 'http://www.someserver.com/cgi-bin/register.cgi'
  4. user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'# 將user_agent寫入頭信息
  5. values = {'name' : 'Michael Foord',
  6.           'location' : 'Northampton',
  7.           'language' : 'Python' }
  8. headers = { 'User-Agent' : user_agent }
  9. data = urllib.urlencode(values)
  10. req = urllib2.Request(url, data, headers)
  11. response = urllib2.urlopen(req)
  12. the_page = response.read()

二.示例
模擬一個利用cookie登錄人人網的過程
clipboard.png

2012-03-07 21:34 上傳

下載附件 (33.07 KB)

說明:
1.人人網的登錄地址需要用BeautifulSoup來抓取。
2.個人信息存在info中。info是一個字典{'email':'xx','password':'xx'}.key的命名需要根據實際網頁中定義,比如豆瓣的定義是{'form_email':'xx','form_password':'xx'}
3.使用cookie的好處在於,登錄之后你可以使用cookie中保存的信息作為頭信息的一部分,利用已經保存的頭信息接着訪問網站。

 

參考:
HOWTO Fetch Internet Resources Using urllib2
Beautiful Soup 中文文檔
How to use Python to login to a webpage and retrieve cookies for later usage?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM