檢視原始碼只有英鎊符號 :
<p class="price_color">£51.77</p>
但是用 requests 去抓卻在英鎊符號前面出現一個額外的亂碼 Â :
>>> import requests
>>> from bs4 import BeautifulSoup
>>> url=f'https://books.toscrape.com/'
>>> res=requests.get(url)
>>> soup=BeautifulSoup(res.text, 'lxml')
>>> prices=soup.select('article > div.product_price > p.price_color')
>>> prices[0].text
'£51.77'
檢查 encoding 發現編碼是 ISO-8859-1 (即 LATIN-1) :
>>> res.encoding
'ISO-8859-1'
但檢視原始碼的 meta 標籤, charset 是 UTF-8 編碼 :
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
好奇怪, requests 不是會根據網頁 meta 標籤內的 charset 屬性自動辨別網頁的編碼格式嗎? 為何明明是 utf-8 卻把 encoding 設為 ISO-8859-1 ?
將 encoding 改成 'utf-8' 還是一樣沒有用 :
>>> res.encoding='utf-8'
>>> prices[0].text
'£51.77'
好像在哪裡看過說編碼轉換成 utf-8 也不見得會完全成功, 不知道這是不是這種情形.
沒有留言 :
張貼留言