gpt4 book ai didi

linux - 在 Python3 中使用 HTMLParser 解析 HTML

转载 作者:太空宇宙 更新时间:2023-11-04 09:46:07 25 4
gpt4 key购买 nike

我在 Python 3 中有一段代码可以在 Windows 中使用 HTMLParser 成功解析 HTML,问题是我也想在 Linux 中运行该脚本,但它似乎无法正常工作。

我使用以下内容检索 HTML 代码:

html = urllib.request.urlopen(url).read()
html_str = str(html)
parse = MyHTMLParser()
parse.feed(html_str)

html 的原始输出如下:

b'\n \n<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\n
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n
<html xmlns="http://www.w3.org/1999/xhtml">\n
<head>\n

html 是二进制的,所以我将它转换为 string 所以 parse.feed 不会报错。问题是我在转换为字符串时得到的 html 是这样的:

'b\'\\n \\n<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\\n
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\\n
<html xmlns="http://www.w3.org/1999/xhtml">\\n
<head>\\n

如您所见,我有几个 \\n,Windows 根本不在乎它们,但对于 Linux,它们是转义序列,因此无法解析 html,因为给他们。我现在不记得确切的错误,但它类似于 can't parse\\

我尝试使用 re 删除多余的 \re.sub("\\",",html_str) 但在 Windows 中似乎什么也没做,在 Linux 中我也遇到错误。

这是我在 Linux 中尝试 re.sub html 时遇到的错误:

>>> re.sub("\\","",html_str)
Traceback (most recent call last):
File "/usr/lib/python3.1/sre_parse.py", line 194, in __next
c = self.string[self.index + 1]
IndexError: string index out of range

知道如何删除 html_str 中多余的 \ 以便在 Linux 中解析它吗?

最佳答案

在 python3 中,您不能像现在这样将 bytes 转换为 str:

html_str = str(html)

这在 python2 中有效,因为 bytesstr 是相同的,但现在您将获得原始字符串的表示。要解码字符串,您需要提供 encoding参数,或使用:

hmtl_str = html.decode(encoding)

如果您无法从 http header 中获取字符集,您可以尝试猜测,或者使用 chardet以确定正确的编码。

关于linux - 在 Python3 中使用 HTMLParser 解析 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16185995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com