即使编码为 utf-8 也有奇怪的字符
There are weird characters even though it's encoded utf-8
尽管有很多解决方案,但我还是花了最后 3 个小时来解决这个问题。它只是对我不起作用,我怀疑我正在废弃的 website 是否已损坏,但 Firefox 完美地显示了内容。正如我所说,这是之前问过的,但我认为有区别我的代码,我想了解它是什么。
from bs4 import BeautifulSoup
import requests
html_text = requests.get('link_for_scrapping').text
soup = BeautifulSoup(html_text, 'lxml')
print(soup.encoding)
soup.encoding = 'utf-8'
print(soup.encoding)
输出:
None
utf-8
为什么一开始编码为“None”?我要查找的内容是用土耳其字符写的,但在其他人的代码中,它们并没有被编码为“None”。它们类似于“ISO-xxxx-x”或其他东西
此外,当我将其转换为“utf-8”时,没有任何变化。还有同样的奇怪字符。
如果我们添加这段代码,我们会看得更清楚:
menu = soup.find(class_="panel-grid-cell col-md-6").text
print(menu)
输出:
None
utf-8
1) 31.01.2022 Pazartesi Yemekler :
Mercimek Ãorba Fırın Patates Mor Dünya Salatası Sıhhiye Kırmızı Lahana Havuç Salata Elma *Etsiz PatatesKalori : 1099
无论我是否将编码更改为 utf-8,问题仍然存在。
预期输出:
None
utf-8
1) 31.01.2022 Pazartesi Yemekler :
Mercimek Çorba Fırın Patates Mor Dünya Salatası Sıhhiye Kırmızı Lahana Havuç Salata Elma *Etsiz PatatesKalori : 1099
提前致谢!
问题:
import requests
r = requests.get('link')
print(r.encoding)
输出:ISO-8859-1
服务器未发送适当的 header,requests
不解析 <meta charset="utf-8" />
,因此默认为 ISO-8859-1。
解决方案 1:告诉请求使用什么编码
r.encoding = 'utf-8'
html_text = r.text
方案二:自己解码
html_text = r.content.decode('utf-8')
解决方案 3:让请求进行猜测
r.encoding = r.apparent_encoding
html_text = r.text
在任何情况下,html_text
现在将包含(正确解码的)html 源并且可以馈送到 BeautifulSoup。
BeautifulSoup
的编码设置没有帮助,因为那时你已经有一个错误解码的字符串!
尽管有很多解决方案,但我还是花了最后 3 个小时来解决这个问题。它只是对我不起作用,我怀疑我正在废弃的 website 是否已损坏,但 Firefox 完美地显示了内容。正如我所说,这是之前问过的,但我认为有区别我的代码,我想了解它是什么。
from bs4 import BeautifulSoup
import requests
html_text = requests.get('link_for_scrapping').text
soup = BeautifulSoup(html_text, 'lxml')
print(soup.encoding)
soup.encoding = 'utf-8'
print(soup.encoding)
输出:
None
utf-8
为什么一开始编码为“None”?我要查找的内容是用土耳其字符写的,但在其他人的代码中,它们并没有被编码为“None”。它们类似于“ISO-xxxx-x”或其他东西
此外,当我将其转换为“utf-8”时,没有任何变化。还有同样的奇怪字符。
如果我们添加这段代码,我们会看得更清楚:
menu = soup.find(class_="panel-grid-cell col-md-6").text
print(menu)
输出:
None
utf-8
1) 31.01.2022 Pazartesi Yemekler :
Mercimek Ãorba Fırın Patates Mor Dünya Salatası Sıhhiye Kırmızı Lahana Havuç Salata Elma *Etsiz PatatesKalori : 1099
无论我是否将编码更改为 utf-8,问题仍然存在。
预期输出:
None
utf-8
1) 31.01.2022 Pazartesi Yemekler :
Mercimek Çorba Fırın Patates Mor Dünya Salatası Sıhhiye Kırmızı Lahana Havuç Salata Elma *Etsiz PatatesKalori : 1099
提前致谢!
问题:
import requests
r = requests.get('link')
print(r.encoding)
输出:ISO-8859-1
服务器未发送适当的 header,requests
不解析 <meta charset="utf-8" />
,因此默认为 ISO-8859-1。
解决方案 1:告诉请求使用什么编码
r.encoding = 'utf-8'
html_text = r.text
方案二:自己解码
html_text = r.content.decode('utf-8')
解决方案 3:让请求进行猜测
r.encoding = r.apparent_encoding
html_text = r.text
在任何情况下,html_text
现在将包含(正确解码的)html 源并且可以馈送到 BeautifulSoup。
BeautifulSoup
的编码设置没有帮助,因为那时你已经有一个错误解码的字符串!