Python自動檢測requests所獲得html文檔的編碼
使用chardet庫自動檢測requests所獲得html文檔的編碼
使用requests和BeautifulSoup庫獲取某個頁面帶來的亂碼問題
使用requests配合BeautifulSoup庫,可以輕松地從網頁中提取數據。但是,當網頁返回的編碼格式與Python默認的編碼格式不一致時,就會導致亂碼問題。
以如下代碼為例,它會獲取到一段亂碼的html:
import requests
from bs4 import BeautifulSoup
# 目標 URL
url = 'https://finance.sina.com.cn/realstock/company/sh600050/nc.shtml'
# 發(fā)送 HTTP GET 請求
response = requests.get(url)
# 檢查請求是否成功
if response.status_code == 200:
# 獲取網頁內容
html_content = response.text
# 使用 BeautifulSoup 解析 HTML 內容
soup = BeautifulSoup(html_content, 'html.parser')
# 要查找的 ID
target_id = 'hqDetails'
# 查找具有特定 ID 的標簽
element = soup.find(id=target_id)
if element:
# 獲取該標簽下的 HTML 內容
element_html = str(element)
print(f"ID 為 {target_id} 的 HTML 內容:\n{element_html}\n")
# 查找該標簽下的所有 table 元素
tables = element.find_all('table')
if tables:
for i, table in enumerate(tables):
print(f"第 {i+1} 個 table 的 HTML 內容:\n{table}\n")
else:
print(f"ID 為 {target_id} 的標簽下沒有 table 元素")
else:
print(f"未找到 ID 為 {target_id} 的標簽")
else:
print(f"請求失敗,狀態(tài)碼: {response.status_code}")

我們可以通過通過手工指定代碼的方式來解決這個問題,例如在response.status_code == 200后,通過response.encoding = 'utf-8'指定代碼,又或通過soup = BeautifulSoup(html_content, 'html.parser', from_encoding='utf-8') 來指定編碼。
然而,當我們獲取的html頁面編碼不確定的時候,有沒有更好的辦法讓編碼監(jiān)測自動執(zhí)行呢?這時候chardet編碼監(jiān)測庫是一個很好的幫手。
使用 chardet 庫自動檢測編碼
chardet 是一個用于自動檢測字符編碼的庫,可以更準確地檢測響應的編碼。
安裝chardet庫
pip install chardet
代碼應用示例
import requests
from bs4 import BeautifulSoup
import chardet
# 目標 URL
url = 'https://finance.sina.com.cn/realstock/company/sh600050/nc.shtml'
# 發(fā)送 HTTP GET 請求
response = requests.get(url)
# 檢查請求是否成功
if response.status_code == 200:
# 自動檢測字符編碼
detected_encoding = chardet.detect(response.content)['encoding']
# 設置響應的編碼
response.encoding = detected_encoding
# 獲取網頁內容
html_content = response.text
# 使用 BeautifulSoup 解析 HTML 內容
soup = BeautifulSoup(html_content, 'html.parser')
# 要查找的 ID
target_id = 'hqDetails'
# 查找具有特定 ID 的標簽
element = soup.find(id=target_id)
if element:
# 獲取該標簽下的 HTML 內容
element_html = str(element)
print(f"ID 為 {target_id} 的 HTML 內容:\n{element_html}\n")
# 查找該標簽下的所有 table 元素
tables = element.find_all('table')
if tables:
for i, table in enumerate(tables):
print(f"第 {i+1} 個 table 的 HTML 內容:\n{table}\n")
else:
print(f"ID 為 {target_id} 的標簽下沒有 table 元素")
else:
print(f"未找到 ID 為 {target_id} 的標簽")
else:
print(f"請求失敗,狀態(tài)碼: {response.status_code}")

可見,通過使用chardet庫,可以有效實現代碼的自動檢測。
以上就是Python自動檢測requests所獲得html文檔的編碼的詳細內容,更多關于Python檢測requests獲得html文檔編碼的資料請關注腳本之家其它相關文章!

