2012-03-14 21 views
1

我試圖從thisisnthappiness.com網站解析HTML。爲此,我使用Python的HTMLParser庫。獲取適用於Python的HTMLParser的定義CSS選擇器的標籤的標籤之間的數據

我的目標是獲得符合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()我看不到從該標籤獲取數據的任何方式。在那兒?我想將標籤中的數據保存在列表中以供進一步使用。

謝謝你的任何建議!

回答

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來查詢,而不是重新發明輪子的數據。