天天看點

利用Python抓取和解析網頁(3)

利用Python抓取和解析網頁(二)(3)

中國網際網路絡資訊網提示: 對搜尋引擎、檔案索引、文檔轉換、資料檢索、站點備份或遷移等應用程式來說,經常用到對網頁(即HTML檔案)的解析處理。事

中國網際網路絡資訊網提示: 對搜尋引擎、檔案索引、文檔轉換、資料檢索、站點備份或遷移等應用程式來說,經常用到對網頁(即HTML檔案)的解析處理。事實上,通過Python語言提供的各種子產品,我們無需借助Web伺服器或者Web浏覽器就能夠解析和處理HTML文檔。

  三、從HTML文檔中提取文本

  處理HTML文檔的時候,我們常常需要從其中提取出所有的文本。使用HTMLParser子產品後,這項任務将變得非常簡單了。首先,我們需要定義一個新的HTMLParser類,以覆寫handle_data()方法,該方法是用來解析并文本資料的。

   import  HTMLParser

   import  urllib

   class  parseText(HTMLParser.HTMLParser):

   def  handle_data(self, data):

   if  data  !=   ' \n ' :

  urlText.append(data)

  lParser  =  parseText()

  lParser.feed(urllib.urlopen( \

  http: // docs.python.org / lib / module - HTMLParser.html).read())

  定義好新的HTMLParser類之後,需要建立一個執行個體來傳回HTMLParser對象。然後,就可以使用urllib.urlopen(url)打開HTML文檔并讀取該HTML檔案的内容了。

  為了解析HTML檔案的内容并顯示包含其中的文本,我們可以使用feed(data)函數将資料傳遞給HTMLParser對象。HTMLParser對象的feed函數将接收資料,并通過定義的HTMLParser對象對資料進行相應的解析。要注意的是,如果傳給HTMLParser的feed()函數的資料不完整的話,那麼不完整的标簽會儲存下來,并在下一次調用feed()函數時進行解析。當HTML檔案很大,需要分段發送給解析器的時候,這個功能就會有用武之地了。下面是一個具體的代碼示例:

   import  HTMLParser

   import  urllib

  urlText  =  []

   # 定義HTML解析器

   class  parseText(HTMLParser.HTMLParser):

   def  handle_data(self, data):

   if  data  !=   ' \n ' :

  urlText.append(data)

   # 建立HTML解析器的執行個體

  lParser  =  parseText()

   # 把HTML檔案傳給解析器

  lParser.feed(urllib.urlopen( \

  “http: // docs.python.org / lib / module - HTMLParser.html” \

  ).read())

  lParser.close()

   for  item  in  urlText:

   print  item

  上面代碼的運作輸出過長,在此略過