2012-02-01 125 views
5

我已经给了一个url,并且我想从url中提取<BODY>标记的内容。 我正在使用Python3。我遇到了sgmllib,但它不适用于Python3。用Python解析html标记

有人可以引导我与此?我可以使用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) 

这给了我错误:类型错误:无法将“字节”对象为str隐含

+8

“请指导我”:会做。搜索。有人问。很多很多次。在你完成搜索之后(在右上角),根据已经给出的答案,随时询问**特定的**问题。 – 2012-02-01 20:11:01

+0

需要具体解析url中的parser.feed()方法吗? – Nerd 2012-02-01 20:15:48

+0

@ghbhatt:向我们展示您需要的一个示例。否则,请参阅我的回答是这是你问的。 – RanRag 2012-02-01 20:16:52

回答

10

要解决该类型错误变线#3

S = STR(f.read())

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

+0

+1也是正确的答案。 – RanRag 2012-02-01 20:57:47

+1

您应该从HTTP标头中找到编码,以便您知道要使用的编码。 – 2012-02-01 22:34:23

4

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

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

,如果你在Parser.feed看看它需要一个字符串或Unicode作为argument.So,做

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

或做x = str(s)

+1

看来,我们在一分钟内给出了相同的答案。 – pycoder112358 2012-02-01 20:52:44

+0

您应该从HTTP标头中找到编码,以便您知道要使用的编码。 – 2012-02-01 22:34:33