Получите данные между тегами для тегов, которые соответствуют определенному селектору CSS, с помощью HTMLParser Python - PullRequest
1 голос
/ 14 марта 2012

Я пытаюсь разобрать HTML с сайта thisisnthappiness.com .Для этого я использую библиотеку Python * HTMLParser * 1004. *мой код до сих пор:

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 Ответ

3 голосов
/ 14 марта 2012

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-селекторы, API-интерфейс etree или DOM для запроса данных, а не изобретать колесо.

...