【问题标题】:Some characters could not be decoded, and were replaced with REPLACEMENT CHARACTER部分字符无法解码,被替换为 REPLACEMENT CHARACTER
【发布时间】:2020-03-09 23:43:59
【问题描述】:

我已经用 Python 编写代码大约 3 个月了,我正在尝试从“https://www.countyhealthrankings.org/app/alabama/2019/rankings”类中为一个类项目做一些网络抓取/结果/”。但是,当我尝试提取站点 html 时,我收到错误消息,“某些字符无法解码,并被替换为替换字符。” 我已经尝试了几种不同类型的解码,但没有运气。我正在使用的代码如下。任何帮助将不胜感激。

代码:

myurl = "https://www.countyhealthrankings.org/app/alabama/2019/rankings/outcomes/"
website = uReq(myurl)
website_html = website.read() #.decode(encoding="iso-8859-1")
print(website_html)
print(type(website_html))
website.close()
site_soup = soup(website_html,"html.parser")#, from_encoding="utf-8)
print(type(site_soup))

html 输出将如下所示:

�}�WI���s����y��-H,��`����6������ 5�J���������J%!��r���cTU�DFFDƖ������?y��������W,��9������ ��y7����5ju���N���{�

数据的字节版本如下所示:

\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\xec}\xf9W\x1bI\xb2\xee\xefs\xce\xfb\x1f\xca\xeay\x83\xfd\x0

【问题讨论】:

  • 只是一个快速更新。我能够通过使用 selenium 和 lmxl 解析网站 html 来解决我的问题。

标签: python html web-scraping decoding


【解决方案1】:

该站点正在使用 gzip 传输编码,而您的 http 客户端没有对其进行解码。

>> from urllib import request
>>> import gzip
>>> res = request.urlopen(url)
>>> content = res.read()
>>> content[:25]
b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\xec}\xf9W\x1bI\xb2\xee\xefs\xce\xfb\x1f\xca\xea'

>>> print(res.headers)
...
Content-Encoding: gzip
Content-Language: en
Content-Type: text/html; charset=utf-8
...
>>> decompressed = gzip.decompress(content)
>>> decompressed[:25]
b'<!DOCTYPE html>\n<!--[if l'

requests 包会自动处理这个问题

>>> import requests
>>> r = requests.get(url)
>>> r.text[:25]
'<!DOCTYPE html>\n<!--[if l'

【讨论】:

  • 你们太棒了。我没想到这么快就有解决方案。谢谢!
【解决方案2】:

我无法重现您的错误,但这是使用 requests 包的工作版本:

import requests
from bs4 import BeautifulSoup as bs

url = "https://www.countyhealthrankings.org/app/alabama/2019/rankings/outcomes/"

r = requests.get(url)

soup = bs(r.content)

print(soup)

【讨论】:

    猜你喜欢
    • 2017-04-14
    • 2013-02-08
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-22
    • 1970-01-01
    相关资源
    最近更新 更多