我在 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
删除多余的\
withre.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
知道如何删除多余的\
inhtml_str
以便在 Linux 中解析它吗?