Python自動(dòng)檢測(cè)requests所獲得html文檔的編碼
使用chardet庫自動(dòng)檢測(cè)requests所獲得html文檔的編碼
使用requests和BeautifulSoup庫獲取某個(gè)頁面帶來的亂碼問題
使用requests配合BeautifulSoup庫,可以輕松地從網(wǎng)頁中提取數(shù)據(jù)。但是,當(dāng)網(wǎng)頁返回的編碼格式與Python默認(rèn)的編碼格式不一致時(shí),就會(huì)導(dǎo)致亂碼問題。
以如下代碼為例,它會(huì)獲取到一段亂碼的html:
import requests from bs4 import BeautifulSoup # 目標(biāo) URL url = 'https://finance.sina.com.cn/realstock/company/sh600050/nc.shtml' # 發(fā)送 HTTP GET 請(qǐng)求 response = requests.get(url) # 檢查請(qǐng)求是否成功 if response.status_code == 200: # 獲取網(wǎng)頁內(nèi)容 html_content = response.text # 使用 BeautifulSoup 解析 HTML 內(nèi)容 soup = BeautifulSoup(html_content, 'html.parser') # 要查找的 ID target_id = 'hqDetails' # 查找具有特定 ID 的標(biāo)簽 element = soup.find(id=target_id) if element: # 獲取該標(biāo)簽下的 HTML 內(nèi)容 element_html = str(element) print(f"ID 為 {target_id} 的 HTML 內(nèi)容:\n{element_html}\n") # 查找該標(biāo)簽下的所有 table 元素 tables = element.find_all('table') if tables: for i, table in enumerate(tables): print(f"第 {i+1} 個(gè) table 的 HTML 內(nèi)容:\n{table}\n") else: print(f"ID 為 {target_id} 的標(biāo)簽下沒有 table 元素") else: print(f"未找到 ID 為 {target_id} 的標(biāo)簽") else: print(f"請(qǐng)求失敗,狀態(tài)碼: {response.status_code}")
我們可以通過通過手工指定代碼的方式來解決這個(gè)問題,例如在response.status_code == 200后,通過response.encoding = 'utf-8'指定代碼,又或通過soup = BeautifulSoup(html_content, 'html.parser', from_encoding='utf-8') 來指定編碼。
然而,當(dāng)我們獲取的html頁面編碼不確定的時(shí)候,有沒有更好的辦法讓編碼監(jiān)測(cè)自動(dòng)執(zhí)行呢?這時(shí)候chardet編碼監(jiān)測(cè)庫是一個(gè)很好的幫手。
使用 chardet 庫自動(dòng)檢測(cè)編碼
chardet 是一個(gè)用于自動(dòng)檢測(cè)字符編碼的庫,可以更準(zhǔn)確地檢測(cè)響應(yīng)的編碼。
安裝chardet庫
pip install chardet
代碼應(yīng)用示例
import requests from bs4 import BeautifulSoup import chardet # 目標(biāo) URL url = 'https://finance.sina.com.cn/realstock/company/sh600050/nc.shtml' # 發(fā)送 HTTP GET 請(qǐng)求 response = requests.get(url) # 檢查請(qǐng)求是否成功 if response.status_code == 200: # 自動(dòng)檢測(cè)字符編碼 detected_encoding = chardet.detect(response.content)['encoding'] # 設(shè)置響應(yīng)的編碼 response.encoding = detected_encoding # 獲取網(wǎng)頁內(nèi)容 html_content = response.text # 使用 BeautifulSoup 解析 HTML 內(nèi)容 soup = BeautifulSoup(html_content, 'html.parser') # 要查找的 ID target_id = 'hqDetails' # 查找具有特定 ID 的標(biāo)簽 element = soup.find(id=target_id) if element: # 獲取該標(biāo)簽下的 HTML 內(nèi)容 element_html = str(element) print(f"ID 為 {target_id} 的 HTML 內(nèi)容:\n{element_html}\n") # 查找該標(biāo)簽下的所有 table 元素 tables = element.find_all('table') if tables: for i, table in enumerate(tables): print(f"第 {i+1} 個(gè) table 的 HTML 內(nèi)容:\n{table}\n") else: print(f"ID 為 {target_id} 的標(biāo)簽下沒有 table 元素") else: print(f"未找到 ID 為 {target_id} 的標(biāo)簽") else: print(f"請(qǐng)求失敗,狀態(tài)碼: {response.status_code}")
可見,通過使用chardet庫,可以有效實(shí)現(xiàn)代碼的自動(dòng)檢測(cè)。
以上就是Python自動(dòng)檢測(cè)requests所獲得html文檔的編碼的詳細(xì)內(nèi)容,更多關(guān)于Python檢測(cè)requests獲得html文檔編碼的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
pytorch: Parameter 的數(shù)據(jù)結(jié)構(gòu)實(shí)例
今天小編就為大家分享一篇pytorch: Parameter 的數(shù)據(jù)結(jié)構(gòu)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12Python添加進(jìn)度條tqdm進(jìn)階使用實(shí)例
這篇文章主要為大家介紹了Python添加進(jìn)度條tqdm進(jìn)階使用實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06Python爬蟲采集Tripadvisor數(shù)據(jù)案例實(shí)現(xiàn)
這篇文章主要為大家介紹了Python爬蟲采集Tripadvisor數(shù)據(jù)案例實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06python隨機(jī)生成庫faker庫api實(shí)例詳解
今天小編就為大家分享一篇python隨機(jī)生成庫faker庫api實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11Python3.8對(duì)可迭代解包的改進(jìn)及用法詳解
這篇文章主要介紹了Python3.8對(duì)可迭代解包的改進(jìn)及用法詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10