為了逐步系統(tǒng)深入地學(xué)習(xí)Python定量城市研究與計算社會科學(xué),我將再從一些基礎(chǔ)知識開始學(xué)起,后續(xù)將由淺入深,逐步更新學(xué)習(xí)筆記芬为。尤其對一些試圖入門Python和計算社會科學(xué)的朋友,可以關(guān)注賜教蟀悦。
請求庫是Python爬蟲開發(fā)中不可缺少的工具之一媚朦,通過向網(wǎng)站發(fā)送HTTP請求并獲取響應(yīng)數(shù)據(jù),可以從網(wǎng)站上抓取數(shù)據(jù)日戈,這是爬蟲的重要功能之一询张。本次,將介紹Python中常用的兩個請求庫:urllib和requests浙炼,以及它們的基本用法和區(qū)別份氧。
urllib
urllib是Python內(nèi)置的HTTP請求庫,它的功能比較全面弯屈,可以滿足大部分爬蟲的需求蜗帜。urllib庫包含以下四個模塊:
- urllib.request:最基本的HTTP請求模塊,可以用它來模擬發(fā)送請求资厉。urllib.error:異常處理模塊厅缺,如果請求錯誤,可以捕獲異常,然后重試其他操作保證程序不會意外終止湘捎。
- urllib.parse:工具模塊诀豁,提供了許多URL處理方法,例如:合并窥妇、拆分舷胜、解析。
- urllib.robotparser:較少使用活翩,識別網(wǎng)站的robots.txt文件烹骨,然后判斷哪些網(wǎng)站可以爬。以下是一個使用urllib庫進(jìn)行HTTP請求的例子:
import?urllib.request
url?=?"https://www.baidu.com"
response?=?urllib.request.urlopen(url)
html?=?response.read().decode('utf-8')
print(html)
在這個例子中纱新,首先我們使用urllib.request.urlopen()方法打開網(wǎng)頁展氓,并將返回的response對象保存到變量response中穆趴。
然后調(diào)用read()方法讀取響應(yīng)內(nèi)容脸爱,最后使用decode()方法將響應(yīng)內(nèi)容從字節(jié)碼轉(zhuǎn)換為字符串,輸出響應(yīng)內(nèi)容未妹。向百度請求的結(jié)果如下:
requests
requests是一個非常流行的Python HTTP請求庫簿废,通常比urllib更簡潔和易用。requests庫自動處理許多HTTP細(xì)節(jié)络它,例如cookies和headers等族檬,讓用戶更加專注于爬取數(shù)據(jù)。
- requests.get()方法是requests模塊中最常用的方法之一化戳,它可以用來向一個URL發(fā)送GET請求单料,并返回一個Response對象。它有以下幾個參數(shù):
以下代碼示例使用requests庫發(fā)起請求并輸出響應(yīng)內(nèi)容:
import?requests
url?=?"https://www.bilibili.com/"
try:
????response?=?requests.get(url)
????response.raise_for_status()????#?判斷返回的response狀態(tài)
????response.encoding?=?response.apparent_encoding
????print(response.text[:500])
except:
????print("爬取失敗")
在這個例子中点楼,首先我們使用requests.get()方法打開指定的網(wǎng)頁扫尖,并將返回的響應(yīng)對象保存到變量response中。然后使用text屬性獲取響應(yīng)內(nèi)容掠廓,輸出響應(yīng)內(nèi)容换怖。向bilibili請求的結(jié)果如下:
requests與urllib對比
requests庫和urllib庫都是Python中常用的HTTP請求庫,但它們有以下幾點(diǎn)不同:
- requests庫更加簡潔易用蟀瞧,只需要一行代碼就可以完成請求和響應(yīng)的處理沉颂;而urllib庫需要更多的代碼來構(gòu)造請求對象和處理響應(yīng)數(shù)據(jù);
- requests庫支持更多的請求方法和參數(shù)傳遞方式悦污;而urllib庫只支持基本的GET和POST方法铸屉,并且需要手動編碼和解碼數(shù)據(jù);
- requests庫支持更多的身份認(rèn)證方式和文件上傳下載方式切端;而urllib庫只支持基本的授權(quán)驗(yàn)證彻坛,并且需要借助其他模塊來實(shí)現(xiàn)文件上傳下載功能;
- requests庫支持更多的高級功能,如Cookie自動處理小压、處理线梗、文件上傳、SSL驗(yàn)證等怠益,不需要額外的模塊支持仪搔。
如果覺得有用就“分享、收藏蜻牢、在看烤咧、點(diǎn)贊?”吧
本文使用 文章同步助手 同步