Urllib庫的基本使用

2021-09-19 18:21:56 字數 3164 閱讀 3779

爬取網頁

爬取網頁其實就是根據url來獲取它的網頁資訊,雖然我們在瀏覽器中看到的是一幅幅優美的畫面,但是其實是由瀏覽器解釋才呈現出來的,實質它是一段html**,加 js、css,如果把網頁比作乙個人,那麼html便是他的骨架,js便是他的肌肉,css便是它的衣服。所以最重要的部分是存在於html中的,下面我們就寫個例子來扒乙個網頁下來。

from urllib import request

response = request.urlopen("")

print(response.read().decode('utf-8'))

只需幾行**,這個網頁的原始碼就被我們扒下來了

分析爬取網頁的方法

我們來分析這兩行**

urlopen(url, data, timeout)
首先我們呼叫的是request的urlopen方法,第乙個引數url即為url,第二個引數data是訪問url時要傳送的資料,第三個timeout是設定超時時間。

第二三個引數是可以不傳送的,data預設為空none,timeout預設為 socket._global_default_timeout

urlopen(url, data, timeout)
response物件有乙個read方法,可以返回獲取到的網頁內容。如果不加read直接列印會是什麼?答案如下:

直接列印出了該物件的描述,所以記得一定要加read方法

構造request

其實上面的urlopen引數可以傳入乙個request請求,它其實就是乙個request類的例項,構造時需要傳入url,data等等的內容。比如上面的兩行**,我們可以這麼改寫:

from urllib import request

req = request.request("")

response = request.urlopen(req)

print(response.read().decode('utf-8'))

執行結果是完全一樣的,只不過中間多了乙個request物件,推薦大家這麼寫,因為在構建請求時還需要加入好多內容,通過構建乙個request,伺服器響應請求得到應答,這樣顯得邏輯上清晰明確。

post和get資料傳送

上面的程式演示了最基本的網頁抓取,不過,現在大多數**都是動態網頁,需要你動態地傳遞引數給它,它做出對應的響應。所以,在訪問時,我們需要傳遞資料給它。例如常見的登入註冊。

把使用者名稱和密碼傳送到乙個url,然後你得到伺服器處理之後的響應,資料傳送分為post和get兩種方式,兩種方式有什麼區別呢?最重要的區別是get方式是直接以鏈結形式訪問,鏈結中包含了所有的引數,當然如果包含了密碼的話是一種不安全的選擇,不過你可以直觀地看到自己提交了什麼內容。post則不會在**上顯示所有的引數,不過如果你想直接檢視提交了什麼就不太方便了,大家可以酌情選擇。

post方式:

from urllib import request, parse

values =

data = parse.urlencode(values).encode('utf-8')

url = ""

req = request.request(url,data)

response = request.urlopen(req)

print(response.read())我們引入了urllib庫,通過url獲取慕課網的課程資訊,我們需要定義乙個字典,名字為values,引數我設定了type和num,下面利用parse的urlencode方法將字典編碼,命名為data,構建request時傳入兩個引數,url和data,執行程式,返回的便是post後呈現的頁面內容。

注意上面字典的定義方式還有一種,下面的寫法是等價的

from urllib import request, parse

values =

data = parse.urlencode(values).encode('utf-8')

url = ""

req = request.request(url,data)

response = request.urlopen(req)

print(response.read())

get方式:

from urllib import request, parse

values =

data = parse.urlencode(values).encode('utf-8')

url = ""

req = request.request(url,data)

response = request.urlopen(req)

print(response.read())

和我們平常get訪問方式一模一樣,這樣就實現了資料的get方式傳送。

參考:

基本庫的使用 urllib

最基礎的http 庫有urllib httplib2 requests treq 等。使用urllib urllib 庫,它是python 內建的http 請求庫,也就是說不需要額外安裝即可使用。它包含如下4 個模組。request 它是最基本的http 請求模組,可以用來模擬傳送請求。就像在瀏覽器...

爬蟲 urllib基本庫的使用

urllib包含了request 開啟和讀取url error 包含request引發的異常 parse 解析url robotparser 解析robots.txt檔案 四個用於處理url的模組。使用urllib.request.urlopen 傳送請求 示例 coding utf 8 from ...

Python爬蟲 Urllib庫的基本使用

其實上面的urlopen引數可以傳入乙個request請求,它其實就是乙個request類的例項,構造時需要傳入url,data等等的內容。比如上面的兩行 我們可以這麼改寫 import urllib import requests request urllib.request.request re...