2012-02-01 159 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