使用Python的HTMLParser获取适合已定义的CSS选择器的标签的标签之间的数据

时间:2012-03-14 14:32:02

标签: python html parsing html-parsing

我正在尝试从thisisnthappiness.com网站解析HTML。为此,我使用的是Python的HTMLParser库。

我的目标是获取符合div.post的标记之间的所有数据(表示为CSS选择器)。

到目前为止,这是我的代码:

import urllib2
from HTMLParser import HTMLParser


class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        if tag == 'div' and ('class', 'post') in attrs:
            print 'tag fits'


def main():
    parser = MyHTMLParser()
    resource = urllib2.urlopen('http://thisisnthappiness.com/')
    parser.feed(resource.read())

if __name__ == "__main__":
    main()

目前,它多次打印tag fits。我正在中途! :)

我很难获得适合 CSS选择器的标签数据。在handle_starttag()中,我没有看到任何从该标记获取数据的方法。在那儿?我想保存列表中标签中的数据以供进一步使用。

感谢任何建议!

1 个答案:

答案 0 :(得分:3)

HTMLParser是一个非常低级别的界面。您必须找到结束标记,然后处理标记之间的html。

以下是lxml.html的内容:

import lxml.html

def main():
    doc = lxml.html.parse("http://thisisnthappiness.com/").getroot()
    for e in doc.cssselect("div.post"):
       print e # this is an object representing the element

if __name__ == "__main__":
    main()

这使您可以使用xpath,CSS选择器,etree API或DOM来查询数据,而不是重新发明轮子。