爬取網頁
爬取網頁其實就是根據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...