盤點 Python 中 urllib 庫和 requests 庫區別
大家好,我是 Go 進階者。今天給大家分享 Python 基礎中兩個網絡爬蟲庫的區別。
一、前言
在使用 Python 爬蟲時,需要模擬發起網絡請求,主要用到的庫有 requests 庫和 python 內置的 urllib 庫,一般建議使用 requests,它是對 urllib 的再次封裝。
那它們兩者有什麼區別 ?
下面通過案例詳細的講解 ,瞭解他們使用的主要區別。
二、urllib 庫
**簡介:**urllib 庫的 response 對象是先創建 http,request 對象,裝載到 reques.urlopen 裏完成 http 請求。
返回的是 http,response 對象,實際上是 html 屬性。使用. read().decode() 解碼後轉化成了 str 字符串類型,decode 解碼後中文字符能夠顯示出來。
例:
from urllib import request
#請求頭
headers = {
"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'
}
wd = {"wd": "中國"}
url = "http://www.baidu.com/s?"
req = request.Request(url, headers=headers)
response = request.urlopen(req)
print(type(response))
print(response)
res = response.read().decode()
print(type(res))
print(res)
運行結果:
注意:
通常爬取網頁,在構造 http 請求的時候,都需要加上一些額外信息,什麼 Useragent,cookie 等之類的信息,或者添加代理服務器。往往這些都是一些必要的反爬機制。
三、requests 庫
簡介:requests 庫調用是 requests.get 方法傳入 url 和參數,返回的對象是 Response 對象,打印出來是顯示響應狀態碼。
通過. text 方法可以返回是 unicode 型的數據,一般是在網頁的 header 中定義的編碼形式,而 content 返回的是 bytes,二級制型的數據,還有 .json 方法也可以返回 json 字符串。
如果想要提取文本就用 text,但是如果你想要提取圖片、文件等二進制文件,就要用 content,當然 decode 之後,中文字符也會正常顯示。
requests 的優勢:Python 爬蟲時,更建議用 requests 庫。因爲 requests 比 urllib 更爲便捷,requests 可以直接構造 get,post 請求併發起,而 urllib.request 只能先構造 get,post 請求,再發起。
例:
import requests
headers = {
"User-Agent": "Mozilla/5.0 (Linux; U; Android 8.1.0; zh-cn; BLA-AL00 Build/HUAWEIBLA-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/8.9 Mobile Safari/537.36"
}
wd = {"wd": "中國"}
url = "http://www.baidu.com/s?"
response = requests.get(url, params=wd, headers=headers)
data = response.text
data2 = response.content
print(response)
print(type(response))
print(data)
print(type(data))
print(data2)
print(type(data2))
print(data2.decode())
print(type(data2.decode()))
運行結果 (可以直接獲取整網頁的信息,打印控制檯):
四、總結
-
本文基於 Python 基礎,主要介紹了 urllib 庫和 requests 庫的區別。
-
在使用 urllib 內的 request 模塊時,返回體獲取有效信息和請求體的拼接需要 decode 和 encode 後再進行裝載。進行 http 請求時需先構造 get 或者 post 請求再進行調用,header 等頭文件也需先進行構造。
-
requests 是對 urllib 的進一步封裝,因此在使用上顯得更加的便捷,建議在實際應用當中儘量使用 requests。
-
希望能給一些對爬蟲感興趣,有一個具體的概念。方法只是一種工具,試着去爬一爬會更容易上手,網絡也會有很多的坑,做爬蟲更需要大量的經驗來應付複雜的網絡情況。
-
希望大家一起探討學習, 一起進步。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/FHuDrwc_JJtDa_ejgo-vAA