我嘗試撰寫一些代碼來查找和列印特定書籍的價格,但是當我運行它回傳的代碼時?£54.23。
是什么??我怎樣才能讓它消失?
據我了解,我應該復制 CSS 路徑,soup.select但由于此選項未顯示在 chrome 上,因此我復制了選擇器。這能負責?嗎?
這是我的 Python 代碼:
import requests
from bs4 import BeautifulSoup
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
headers = {'User-Agent': user_agent}
res_obj = requests.get('http://books.toscrape.com/')
res_obj.raise_for_status()
soup = BeautifulSoup(res_obj.text, 'html.parser')
sapiens_price = soup.select('#default > div > div > div > div > section > div:nth-child(2) > ol > li:nth-child(5) > article > div.product_price > p.price_color')
print(sapiens_price[0].text)
uj5u.com熱心網友回復:
原因是response.text沒有使用正確的編碼。
請參閱請求檔案,并注意這一點:
當您發出請求時,Requests 會根據 HTTP 標頭對回應的編碼進行有根據的猜測。訪問 r.text 時使用 Requests 猜測的文本編碼
在您的情況下,如果您在 IDLE 中運行代碼,這就是您在檢查編碼時得到的結果:
>>> res_obj.encoding
'ISO-8859-1'
再次從檔案中:
如果您更改編碼,Requests 將在您呼叫時使用 r.encoding 的新值
r.text
要覆寫這個猜測的編碼,只需設定新的編碼。在您的情況下,它將是 UTF-8:
>>> res_obj.encoding='UTF-8'
在訪問之前執行此操作res_obj.text,您的代碼將正常作業:。
res_obj = requests.get('http://books.toscrape.com/')
# SET ENCODING MANUALLY
res_obj.encoding='utf-8'
soup = BeautifulSoup(res_obj.text, 'html.parser')
sapiens_price = soup.select('...')
print(sapiens_price[0].text)
TLDR;使用res.encoding='utf-8'訪問之前res.text。
uj5u.com熱心網友回復:
試試這個:
soup = BeautifulSoup(res_obj.text, 'html.parser')
sapiens_price = soup.select('#default > div > div > div > div > section > div:nth-child(2) > ol > li:nth-child(5) > article > div.product_price > p.price_color')
print(sapiens_price[0].text.encode('ascii', 'ignore').decode())
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/407887.html
標籤:
上一篇:從for回圈動態創建串列名稱
