【问题标题】:Parsing html tags with Python用 Python 解析 html 标签
【发布时间】:2012-02-24 12:41:25
【问题描述】:

我得到了一个 url,我想从 url 中提取 <BODY> 标记的内容。 我正在使用 Python3。我遇到了sgmllib,但它不适用于 Python3。

有人可以指导我吗?我可以为此使用HTMLParser 吗?

这是我尝试过的:

import urllib.request
f=urllib.request.urlopen("URL")
s=f.read()

from html.parser import HTMLParser
class MyHTMLParser(HTMLParser):
    def handle_data(self, data):
        print("Encountered   some data:", data)

parser = MyHTMLParser()
parser.feed(s)

这给了我错误:TypeError: Can't convert 'bytes' object to str implicitly

【问题讨论】:

  • “请指导我”:会的。搜索。被问过了。很多很多次。完成搜索后(在右上角),请根据已经给出的答案随意提出具体问题。
  • 具体可以在parser.feed()方法中解析url吗?
  • @ghbhatt:向我们展示您需要的示例。否则,请参阅我的答案就是您要问的。
  • @RanRag:我确实编辑了我的问题。请看一下。

标签: python-3.x


【解决方案1】:

如果你看看你的 s 变量,它的类型是字节。

>>> type(s)
<class 'bytes'>

如果你看一下Parser.feed,它需要一个字符串或 unicode 作为参数。所以,做

>>> x = s.decode('utf-8')
>>> type(x)
<class 'str'>
>>> parser.feed(x)

或者x = str(s)

【讨论】:

  • 似乎我们在一分钟内给出了相同的答案。
  • 您应该从 HTTP 标头中找到编码,这样您就知道要使用什么编码。
【解决方案2】:

修复 TypeError 将第 3 行更改为

s = str(f.read())

您得到的网页是以字节的形式返回的,您需要将字节更改为字符串以将它们提供给解析器。

【讨论】:

  • 您应该从 HTTP 标头中找到编码,这样您就知道要使用什么编码。
猜你喜欢
  • 2016-02-14
  • 2014-07-16
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多