Python標準庫之urllib,urllib2

2022-07-04 02:12:10 字數 2200 閱讀 5666

urllib模組提供了一些高階介面,用於編寫需要與http伺服器互動的客戶端。典型的應用程式包括從網頁抓取資料、自動化、**、網頁爬蟲等。

在python 2中,urllib功能分散在幾個不同的庫模組中,包括urllib、urllib2、urlparse等。在python 3中,所有功能都合併在urllib包中。

要抓取html網頁,很簡單

import urllib2

response=urllib2.urlopen('')

urlopen建立乙個表示遠端url的類檔案物件,然後像本地檔案一樣操作這個類檔案物件來獲取遠端資料。引數url表示遠端資料的路徑,一般是**。如果要執行更加複雜的操作,如修改http報頭,可建立request例項並當為url引數使用;引數data表示以post方式提交到url的數

據,需要經過url編碼;timeout是可選的超時選項。urlopen返回 乙個類檔案物件,他提供了如下方法:

>>> response.getcode()

200>>> response.geturl()

'.hk/'

info()返回的mimetools.message對映

物件有headers、getheader()、getplist() 、getparam()等方法。

message=response.info()

message.headers #返回http報頭資訊的列表

for header in message:

print header,message.getheader(header) #獲取報頭資訊

for header in message:

print header,message[header] #message可用字典的方法分析

message.getparam('charset') #獲取url編碼

urllib中還提供了一些方法,用於對url進行編碼、解碼。url中是不能出現一些特殊的符號的,有些符號有特殊的用途。

urllib.quote()

使用適合url內容的轉義序列替換string中的特殊字元。字母、數字、下劃線(_)、逗號(,)、句號(.)、連字元(-)都保持不變。其他字元轉換成%xx形式的轉義序列,預設使用utf-8編碼。

urllib.unquote()

解碼urllib.urlencode(query)

將query中的查詢值轉換成乙個url編碼的字串。query可以是乙個字典,也可以是乙個(key,value)的對序列。得到的是以'&'字元分割的'key=value'對序列。

import urllib

form_data= #要提交的表單資料

url_data=urllib.urlencode(form_data) #url_data被編碼為'passwd=123456&user=jhon'

full_url=''+'?'+url_data

u=urllib2.urlopen(full_url)

request例項可以替代urlopen(url)中的url來實現更加複雜的操作。headers是乙個字典,包含了可表示http報頭內容的鍵值對映。

有一些**不希望被某些程式瀏覽或者針對不同的瀏覽器返回不同的版本。預設情況下,urlib2把自己識別為python-urllib/x.y(這裡的 xy是python發行版的主要或次要的版本號,如,

python-urllib/2.7)。瀏覽器區別自身的方式是通過user-agent頭。

如果要模擬chrome瀏覽器連線:

r=urllib2.request("",headers=headers)

u=urllib2.urlopen(r)

要處理cookie的時候,注意不要在request裡面設定headers,因為cookie也在headers裡面,設定headers會將cookie覆蓋掉。

可以用request().add_header(key,value)方法。

爬蟲 Python爬蟲學習筆記之Urllib庫

1.urllib.request開啟和讀取url 2.urllib.error包含urllib.request各種錯誤的模組 3.urllib.parse解析url 4.urllib.robotparse解析 robots.txt檔案 傳送get請求 引入urlopen庫 用於開啟網頁 from u...

Python標準庫之time, datetime包

python具有良好的時間和日期管理功能。實際上,計算機只會維護乙個掛鐘時間 wall clock time 這個時間是從某個固定時間起點到現在的時間間隔。時間起點的選擇與計算機相關,但一台計算機的話,這一時間起點是固定的。其它的日期資訊都是從這一時間計算得到的。此外,計算機還可以測量cpu實際上執...

Python標準庫之asyncio

asyncio是python 3.4版本引入的標準庫,直接內建了對非同步io的支援。asyncio的程式設計模型就是乙個訊息迴圈。我們從asyncio模組中直接獲取乙個eventloop的引用,然後把需要執行的協程扔到eventloop中執行,就實現了非同步io。用asyncio實現hello wo...