關(guān)于做網(wǎng)站的google play store
Python 爬蟲(chóng)入門(mén)(七):requests 庫(kù)的使用「詳細(xì)介紹」
- 前言
- 1. 初識(shí) requests
- 1.1 安裝 requests 庫(kù)
- 1.2 發(fā)送 GET 請(qǐng)求
- 1.3 發(fā)送 POST 請(qǐng)求
- 2. HTTP 請(qǐng)求詳解
- 2.1 請(qǐng)求方法
- 2.2 請(qǐng)求頭
- 2.3 請(qǐng)求參數(shù)
- 3. 處理響應(yīng)
- 3.1 響應(yīng)內(nèi)容
- 3.2 響應(yīng)狀態(tài)碼
- 3.3 響應(yīng)頭
- 4. 會(huì)話(huà)保持
- 5. SSL 證書(shū)驗(yàn)證
- 6. 使用代理
- 7. 文件上傳與下載
- 7.1 文件上傳
- 7.2 文件下載
- 8. 處理復(fù)雜的網(wǎng)頁(yè)
- 9. 實(shí)戰(zhàn)項(xiàng)目:抓取數(shù)據(jù)
- 9.1 項(xiàng)目需求
- 9.2 項(xiàng)目步驟
- 9.3 示例代碼
- 總結(jié)
前言
歡迎來(lái)到“Python 爬蟲(chóng)入門(mén)”系列的第七篇文章。本篇文章將詳細(xì)介紹如何使用
requests
庫(kù)進(jìn)行網(wǎng)絡(luò)請(qǐng)求,包括發(fā)送各種類(lèi)型的 HTTP 請(qǐng)求、處理響應(yīng)、會(huì)話(huà)保持、SSL 證書(shū)驗(yàn)證、代理設(shè)置、文件上傳與下載等內(nèi)容。在本篇文章的代碼示例中,我將使用
https://jsonplaceholder.typicode.com
網(wǎng)站的數(shù)據(jù),這是一個(gè)提供假數(shù)據(jù)的免費(fèi) REST API 服務(wù)的網(wǎng)站。這個(gè)服務(wù)由 JSON Server 和 LowDB 支持,每月提供約30億次請(qǐng)求。它被稱(chēng)為 “JSONPlaceholder”,常用于測(cè)試和原型設(shè)計(jì)。
requests
庫(kù)是 Python 中最流行的 HTTP 庫(kù)之一,因其簡(jiǎn)單易用和功能強(qiáng)大而廣受歡迎。如果你是一個(gè)爬蟲(chóng)開(kāi)發(fā)新手,本篇文章將幫助你全面掌握requests
庫(kù)的用法,從而提升你的爬蟲(chóng)開(kāi)發(fā)技能。
1. 初識(shí) requests
1.1 安裝 requests 庫(kù)
首先,確保你已經(jīng)安裝了 requests
庫(kù)。如果沒(méi)有安裝,可以使用以下命令安裝:
pip install requests
1.2 發(fā)送 GET 請(qǐng)求
我們先從最基本的 GET 請(qǐng)求開(kāi)始。
import requests# 發(fā)送 GET 請(qǐng)求
response = requests.get('https://jsonplaceholder.typicode.com/posts')
print(response.status_code) # 輸出狀態(tài)碼
print(response.json()) # 輸出響應(yīng)內(nèi)容
上面的代碼向 https://jsonplaceholder.typicode.com/posts
發(fā)送了一個(gè) GET 請(qǐng)求,并打印出響應(yīng)的狀態(tài)碼和內(nèi)容。
1.3 發(fā)送 POST 請(qǐng)求
接下來(lái),我們來(lái)發(fā)送一個(gè) POST 請(qǐng)求。
import requests# 發(fā)送 POST 請(qǐng)求
data = {'title': 'foo','body': 'bar','userId': 1
}
response = requests.post('https://jsonplaceholder.typicode.com/posts', json=data)
print(response.status_code) # 輸出狀態(tài)碼
print(response.json()) # 輸出響應(yīng)內(nèi)容
在這個(gè)例子中,我們向 https://jsonplaceholder.typicode.com/posts
發(fā)送了一個(gè) POST 請(qǐng)求,并附帶了一些數(shù)據(jù)。
2. HTTP 請(qǐng)求詳解
2.1 請(qǐng)求方法
requests
庫(kù)支持多種 HTTP 請(qǐng)求方法,包括 GET、POST、PUT、DELETE、HEAD、OPTIONS 等。
import requests# 發(fā)送 PUT 請(qǐng)求
data = {'id': 1,'title': 'foo','body': 'bar','userId': 1
}
response = requests.put('https://jsonplaceholder.typicode.com/posts/1', json=data)
print(response.status_code) # 輸出狀態(tài)碼
print(response.json()) # 輸出響應(yīng)內(nèi)容
發(fā)送 PUT 請(qǐng)求執(zhí)行結(jié)果如下:
import requests# 發(fā)送 DELETE 請(qǐng)求
response = requests.delete('https://jsonplaceholder.typicode.com/posts/1')
print(response.status_code) # 輸出狀態(tài)碼
發(fā)送 DELETE 請(qǐng)求執(zhí)行結(jié)果如下:
2.2 請(qǐng)求頭
有時(shí)候我們需要在請(qǐng)求中添加一些頭信息,例如 User-Agent、Content-Type 等。
import requests# 添加請(qǐng)求頭
headers = {'User-Agent': 'Mozilla/5.0','Content-Type': 'application/json'
}
response = requests.get('https://jsonplaceholder.typicode.com/posts', headers=headers)
print(response.status_code) # 輸出狀態(tài)碼
print(response.json()) # 輸出響應(yīng)內(nèi)容
2.3 請(qǐng)求參數(shù)
我們可以通過(guò) URL 參數(shù)來(lái)傳遞數(shù)據(jù)。
import requests# 添加請(qǐng)求參數(shù)
params = {'userId': 1
}
response = requests.get('https://jsonplaceholder.typicode.com/posts', params=params)
print(response.status_code) # 輸出狀態(tài)碼
print(response.json()) # 輸出響應(yīng)內(nèi)容
執(zhí)行結(jié)果如下:
3. 處理響應(yīng)
3.1 響應(yīng)內(nèi)容
響應(yīng)內(nèi)容可以是 JSON、文本、二進(jìn)制數(shù)據(jù)等。
import requestsresponse = requests.get('https://jsonplaceholder.typicode.com/posts/1')# 獲取響應(yīng)內(nèi)容
print(response.text) # 以字符串形式輸出
print(response.json()) # 以 JSON 形式輸出
print(response.content) # 以二進(jìn)制形式輸出
執(zhí)行結(jié)果如下:
3.2 響應(yīng)狀態(tài)碼
我們可以通過(guò)響應(yīng)對(duì)象的 status_code
屬性來(lái)獲取狀態(tài)碼。
3.3 響應(yīng)頭
響應(yīng)頭包含了很多有用的信息,例如服務(wù)器類(lèi)型、內(nèi)容類(lèi)型等。
import requestsresponse = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.headers)
執(zhí)行結(jié)果如下:
4. 會(huì)話(huà)保持
使用 requests
庫(kù)的會(huì)話(huà)對(duì)象可以在多個(gè)請(qǐng)求之間保持某些參數(shù)。
import requests# 創(chuàng)建會(huì)話(huà)對(duì)象
session = requests.Session()# 設(shè)置會(huì)話(huà)級(jí)別的請(qǐng)求頭
session.headers.update({'User-Agent': 'Mozilla/5.0'})# 發(fā)送請(qǐng)求
response = session.get('https://jsonplaceholder.typicode.com/posts')
print(response.status_code)
print(response.json())
5. SSL 證書(shū)驗(yàn)證
requests
庫(kù)默認(rèn)會(huì)驗(yàn)證 SSL 證書(shū)。你可以通過(guò) verify
參數(shù)來(lái)控制這一行為。
import requests# 禁用 SSL 證書(shū)驗(yàn)證
response = requests.get('https://jsonplaceholder.typicode.com/posts', verify=False)
print(response.status_code)
執(zhí)行結(jié)果如下:
6. 使用代理
在爬蟲(chóng)開(kāi)發(fā)中,使用代理可以幫助我們隱藏真實(shí)的 IP 地址。
import requestsproxies = {'http': 'http://10.10.10.10:8000','https': 'http://10.10.10.10:8000'
}response = requests.get('https://jsonplaceholder.typicode.com/posts', proxies=proxies)
print(response.status_code)
7. 文件上傳與下載
7.1 文件上傳
我們可以使用 requests
庫(kù)輕松地上傳文件。
import requests# 文件上傳
files = {'file': open('example.txt', 'rb')}
response = requests.post('https://jsonplaceholder.typicode.com/posts', files=files)
print(response.status_code)
print(response.json())
7.2 文件下載
同樣地,我們也可以下載文件。
import requestsresponse = requests.get('https://jsonplaceholder.typicode.com/photos/1', stream=True)
with open('photo.jpg', 'wb') as file:for chunk in response.iter_content(chunk_size=128):file.write(chunk)
print('文件下載完成')
8. 處理復(fù)雜的網(wǎng)頁(yè)
對(duì)于一些復(fù)雜的網(wǎng)頁(yè),我們可能需要處理 JavaScript 動(dòng)態(tài)加載的內(nèi)容。這時(shí)可以結(jié)合 requests
和 BeautifulSoup
庫(kù)來(lái)實(shí)現(xiàn)。
import requests
from bs4 import BeautifulSoupresponse = requests.get('https://jsonplaceholder.typicode.com/')
soup = BeautifulSoup(response.text, 'html.parser')# 提取標(biāo)題
titles = soup.find_all('title')
for title in titles:print(title.text)
執(zhí)行結(jié)果如下:
9. 實(shí)戰(zhàn)項(xiàng)目:抓取數(shù)據(jù)
接下來(lái),我們將結(jié)合前面所學(xué)的內(nèi)容,編寫(xiě)一個(gè)完整的爬蟲(chóng)項(xiàng)目,從網(wǎng)站中抓取數(shù)據(jù)并保存到 CSV 文件中。
9.1 項(xiàng)目需求
- 從
https://jsonplaceholder.typicode.com/posts
提取標(biāo)題和鏈接。 - 將數(shù)據(jù)保存到 CSV 文件中。
9.2 項(xiàng)目步驟
- 發(fā)送請(qǐng)求并獲取響應(yīng)。
- 解析響應(yīng)內(nèi)容。
- 保存數(shù)據(jù)到 CSV 文件。
9.3 示例代碼
import requests
import csvdef fetch(url):response = requests.get(url)if response.status_code == 200:data = []posts = response.json()for post in posts:title = post['title']link = f"https://jsonplaceholder.typicode.com/posts/{post['id']}"data.append([title, link])return dataelse:print('請(qǐng)求失敗,狀態(tài)碼:', response.status_code)return []def save_to_csv(data, filename):with open(filename, 'w', newline='', encoding='utf-8') as file:writer = csv.writer(file)writer.writerow(['Title', 'Link'])writer.writerows(data)if __name__ == '__main__':url = 'https://jsonplaceholder.typicode.com/posts'data = fetch(url)if data:save_to_csv(data, 'datas.csv')print('數(shù)據(jù)已保存到 datas.csv')
總結(jié)
通過(guò)本篇文章的學(xué)習(xí),相信小伙伴們已經(jīng)掌握了 requests
庫(kù)的基本用法,涵蓋了發(fā)送各種請(qǐng)求、處理響應(yīng)、會(huì)話(huà)保持、SSL 證書(shū)驗(yàn)證、代理設(shè)置、文件上傳與下載等內(nèi)容。