如何在Python 3中收集HTMLParser的数据

时间:2017-06-14 10:58:11

标签: html python-3.x html-parsing

逗人,

我需要在字符串数组

中收集以下HTML中的数据
parser.feed( <table><tr><td><a href="https://rads.stackoverflow.com/amzn/click/com/B00JX1ZS5O" rel="nofollow noreferrer" target="_blank"><img src="https://images-na.ssl-images-amazon.com/images/I/41B39oDSGQL._SL160_.jpg" alt="Product Image" style='border:0'/></a></td><td><tr><td>List Price: <strike>$34.99</strike></td></tr><tr><td><b>Deal Price: $7.99</b></td></tr><tr><td>You Save: $2.00 (20%)</td></tr><tr><td>Sabrent 4-Port USB 3.0 Hub with Individual Power Switches and LEDs (HB-UM43)</td></tr><tr><td>Expires Jun 15, 2017</td></tr></td></tr></table>)

所以我使用了以下但是

class MyHTMLParser(HTMLParser):

    def handle_data(self, data):
        self.Datacollected(data)
        return (data)
parser = MyHTMLParser() 
Collector=[]
Collector.append[parser.feed("HTML Code HERE")]

但它始终为空

1 个答案:

答案 0 :(得分:1)

feed方法一次解析一个HTML元素,并将其交给handle_data方法。 feed的返回值为None,这就是您的列表为空的原因。如果要将所有数据保存到解析器中,则需要在__init__()方法中添加一些数据结构,如list,在handle_data方法中将数据包含在其中,并实现另一种返回数据的方法,例如:

class MyHTMLParser(HTMLParser):

    def __init__(self, **kwargs, *args):
        self.d = []
        super().__init__()

    def handle_data(self, data):
        self.d.append(data)
        return (data)

    def return_data(self):
        return self.d

collector=[] 
parser = MyHTMLParser() 
parser.feed("HTML Code HERE")
collector.append(parser.return_data())