使用Python的requests庫(kù)進(jìn)行網(wǎng)頁(yè)數(shù)據(jù)抓取的詳細(xì)教程
引言
網(wǎng)絡(luò)爬蟲是一種自動(dòng)化程序,用于從互聯(lián)網(wǎng)上抓取數(shù)據(jù)。無(wú)論是用于數(shù)據(jù)分析、市場(chǎng)研究、學(xué)術(shù)研究,還是搜索引擎的網(wǎng)頁(yè)索引,爬蟲技術(shù)都在現(xiàn)代互聯(lián)網(wǎng)應(yīng)用中發(fā)揮著重要作用。
本文將通過 requests 庫(kù) 來講解如何進(jìn)行基本的網(wǎng)頁(yè)數(shù)據(jù)抓取。requests 是 Python 中一個(gè)簡(jiǎn)單易用的庫(kù),它通過封裝 HTTP 請(qǐng)求,簡(jiǎn)化了網(wǎng)絡(luò)請(qǐng)求的過程,是實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲的理想選擇。
1. 安裝 requests 庫(kù)
首先,如果你還沒有安裝 requests 庫(kù),可以通過 pip 安裝:
pip install requests
2. 發(fā)送簡(jiǎn)單的 HTTP 請(qǐng)求
requests
庫(kù)的核心功能是發(fā)送 HTTP 請(qǐng)求并獲取響應(yīng)。下面是一個(gè)簡(jiǎn)單的示例,展示如何向一個(gè)網(wǎng)頁(yè)發(fā)送 GET 請(qǐng)求并查看響應(yīng)內(nèi)容。
import requests # 發(fā)送 GET 請(qǐng)求 response = requests.get('https://www.example.com') # 輸出響應(yīng)狀態(tài)碼 print("Status Code:", response.status_code) # 輸出網(wǎng)頁(yè)內(nèi)容(HTML) print("Response Text:", response.text)
解釋:
requests.get(url)
:向指定的 URL 發(fā)送 GET 請(qǐng)求。response.status_code
:返回 HTTP 響應(yīng)的狀態(tài)碼(如 200 表示成功)。response.text
:返回網(wǎng)頁(yè)的 HTML 內(nèi)容。
3. 請(qǐng)求帶有參數(shù)的 URL
很多時(shí)候,網(wǎng)頁(yè)需要帶有查詢參數(shù)來進(jìn)行動(dòng)態(tài)請(qǐng)求。requests
可以通過字典傳遞參數(shù),方便地構(gòu)造請(qǐng)求 URL。
import requests url = 'https://httpbin.org/get' params = { 'name': 'John', 'age': 30 } # 發(fā)送帶有查詢參數(shù)的 GET 請(qǐng)求 response = requests.get(url, params=params) # 輸出響應(yīng)的 URL,查看最終請(qǐng)求的 URL print("Requested URL:", response.url) # 輸出響應(yīng)內(nèi)容 print("Response Text:", response.text)
在這個(gè)示例中,params 字典中的鍵值對(duì)將被編碼為 URL 查詢參數(shù),最終構(gòu)成 URL https://httpbin.org/get?name=John&age=30。
4. 發(fā)送 POST 請(qǐng)求
有些網(wǎng)站的表單數(shù)據(jù)需要通過 POST 請(qǐng)求提交。requests 庫(kù)同樣支持發(fā)送 POST 請(qǐng)求,并且可以傳遞數(shù)據(jù)。
import requests url = 'https://httpbin.org/post' data = { 'username': 'admin', 'password': '123456' } # 發(fā)送 POST 請(qǐng)求 response = requests.post(url, data=data) # 輸出響應(yīng)內(nèi)容 print("Response Text:", response.text)
解釋:
requests.post(url, data=data)
:向 URL 發(fā)送 POST 請(qǐng)求,并通過data
參數(shù)傳遞表單數(shù)據(jù)。- 你還可以用
json=data
傳遞 JSON 格式的數(shù)據(jù)。
5. 處理請(qǐng)求頭(Headers)
有時(shí)候,發(fā)送 HTTP 請(qǐng)求時(shí)需要設(shè)置特定的請(qǐng)求頭(Headers),如用戶代理(User-Agent)、認(rèn)證信息等。requests
可以通過 headers
參數(shù)輕松設(shè)置。
import requests url = 'https://www.example.com' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36' } # 發(fā)送帶有頭部信息的 GET 請(qǐng)求 response = requests.get(url, headers=headers) # 輸出響應(yīng)內(nèi)容 print("Response Text:", response.text)
在這個(gè)示例中,User-Agent
模擬了瀏覽器的請(qǐng)求,使得目標(biāo)網(wǎng)站認(rèn)為請(qǐng)求來自于瀏覽器,而不是爬蟲。
6. 處理響應(yīng)內(nèi)容
requests
庫(kù)支持多種響應(yīng)格式,例如 HTML、JSON、圖片等。通過檢查響應(yīng)的內(nèi)容類型,你可以輕松地處理不同類型的數(shù)據(jù)。
6.1 解析 JSON 響應(yīng)
有些網(wǎng)站返回的數(shù)據(jù)是 JSON 格式,requests
提供了 .json()
方法來解析 JSON 數(shù)據(jù)。
import requests url = 'https://jsonplaceholder.typicode.com/posts' response = requests.get(url) # 如果返回的是 JSON 數(shù)據(jù),可以使用 .json() 方法解析 json_data = response.json() print("JSON Data:", json_data)
6.2 下載文件(如圖片)
如果爬取的內(nèi)容是文件,例如圖片,可以使用 requests
庫(kù)的 content
屬性來處理二進(jìn)制數(shù)據(jù)。
import requests url = 'https://www.example.com/sample.jpg' response = requests.get(url) # 保存圖片到本地 with open('sample.jpg', 'wb') as file: file.write(response.content)
7. 異常處理
在使用 requests
發(fā)送請(qǐng)求時(shí),可能會(huì)遇到網(wǎng)絡(luò)問題、超時(shí)、404 錯(cuò)誤等。為了提高爬蟲的健壯性,建議使用異常處理來捕獲錯(cuò)誤。
import requests try: response = requests.get('https://www.example.com', timeout=5) response.raise_for_status() # 如果響應(yīng)狀態(tài)碼是 4xx 或 5xx,拋出異常 except requests.exceptions.RequestException as e: print(f"Request failed: {e}")
8. 爬蟲中的好實(shí)踐
設(shè)置合理的請(qǐng)求間隔:為了避免對(duì)目標(biāo)服務(wù)器造成過大的壓力,可以設(shè)置請(qǐng)求間隔,避免頻繁的請(qǐng)求。
import time time.sleep(1) # 暫停 1 秒
遵守 robots.txt 規(guī)范:在爬取數(shù)據(jù)之前,檢查目標(biāo)網(wǎng)站的
robots.txt
文件,確保你的爬蟲遵守該網(wǎng)站的爬蟲規(guī)則。使用代理:如果爬取頻繁的請(qǐng)求導(dǎo)致被封禁,可以考慮使用代理池來改變請(qǐng)求的 IP 地址。
請(qǐng)求頭偽裝:模擬真實(shí)的瀏覽器請(qǐng)求,避免被識(shí)別為爬蟲。
9. 總結(jié)
requests
庫(kù)是 Python 中非常簡(jiǎn)潔易用的 HTTP 請(qǐng)求庫(kù),適用于大多數(shù)的網(wǎng)頁(yè)數(shù)據(jù)抓取需求。在使用 requests
庫(kù)時(shí),你需要了解如何發(fā)送 GET/POST 請(qǐng)求,如何傳遞參數(shù)、處理響應(yīng)數(shù)據(jù)以及處理異常情況。
以上就是使用Python的requests庫(kù)進(jìn)行網(wǎng)頁(yè)數(shù)據(jù)抓取的詳細(xì)教程的詳細(xì)內(nèi)容,更多關(guān)于Python requests庫(kù)網(wǎng)頁(yè)數(shù)據(jù)抓取的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Python爬蟲之使用BeautifulSoup和Requests抓取網(wǎng)頁(yè)數(shù)據(jù)
- Python requests模塊基礎(chǔ)使用方法實(shí)例及高級(jí)應(yīng)用(自動(dòng)登陸,抓取網(wǎng)頁(yè)源碼)實(shí)例詳解
- Python3使用requests包抓取并保存網(wǎng)頁(yè)源碼的方法
- Python網(wǎng)絡(luò)請(qǐng)求使用Requests庫(kù)抓取解析數(shù)據(jù)
- python爬蟲開發(fā)之使用Python爬蟲庫(kù)requests多線程抓取貓眼電影TOP100實(shí)例
相關(guān)文章
Python JSON格式數(shù)據(jù)的提取和保存的實(shí)現(xiàn)
這篇文章主要介紹了Python JSON格式數(shù)據(jù)的提取和保存的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03python切片中內(nèi)存的注意事項(xiàng)總結(jié)
在本篇文章里小編給大家整理的是一篇關(guān)于python切片中內(nèi)存的注意事項(xiàng)總結(jié)內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。2021-08-08windows+vscode穿越跳板機(jī)調(diào)試遠(yuǎn)程代碼的圖文教程
本文通過圖文并茂的形式給大家介紹了windows+vscode穿越跳板機(jī)調(diào)試遠(yuǎn)程代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02Python進(jìn)階之遞歸函數(shù)的用法及其示例
本篇文章主要介紹了Python進(jìn)階之遞歸函數(shù)的用法及其示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-01-01