【问题标题】:Get data between tags for tags that fit defined CSS selector with Python's HTMLParser使用 Python 的 HTMLParser 获取适合定义的 CSS 选择器的标签之间的数据
【发布时间】:2012-03-14 14:32:02
【问题描述】:

我正在尝试解析来自 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() 中,我看不到任何从该标签获取数据的方法。在那儿?我想将标签中的数据保存在列表中以供进一步使用。

感谢您的任何建议!

【问题讨论】:

    标签: python html parsing html-parsing


    【解决方案1】:

    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 来查询数据,而不是重新发明轮子。

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      • 2011-03-17
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      • 2018-08-30
      相关资源
      最近更新 更多