2011-12-24 42 views
3

我昨天安裝BeautifulSoup 4.0b和現在我想添加一個正則表達式替換一對將在分析器前階段跑出。在本文檔中,它說我可以簡單地使用markupMassage參數__init__其分配給MARKUP_MASSAGE,但似乎4.0B不再具有這些屬性,儘管README不提它(除非我錯過了嗎?)。BeautifulSoup 4.0B markupMassage

所以我的問題是,有沒有辦法從BeautifulSoup 4.0B獲得此相同的功能

回答

3

自述確實(在某種程度上)涉及這一問題,但它必須由這字裏行間可推斷部分:

=關於美麗的湯4 =

這是一個幾乎完全重寫,在支持的系統,讓你寫一個小膠 代碼和插件中刪除美麗的湯的習俗 HTML解析器任何HTML或你想要的XML解析器。

美麗的湯4.0自帶膠水代碼四個解析器:

  • Python的標準的HTMLParser
  • LXML的HTML和XML解析器
  • html5lib的HTML解析器

的HTMLParser是默認的,但我建議你安裝 其他解析器之一,或者你必須處理現實世界的標記問題。

舊的自定義分析器是基於SGMLParser從棄用sgmllib模塊(這是在Python 3移除),以及markupMassage功能主要有修復無效的標記是SGMLParser玩不轉。所以當舊的自定義分析器去時,markupMassage功能也隨之而來。

據推測,現在不得不通過對新分析器之一進行子類化來添加默認不再提供的任何功能。

所以,如果lxml安裝,你需要做這樣的事情:

from bs4.builder import LXMLTreeBuilder 

class Builder(LXMLTreeBuilder): 
    def __init__(self, *args, **kwargs): 
     super(Builder, self).__init__(*args, **kwargs) 

    def prepare_markup(self, *args, **kwargs): 

     markup, user_enc, doc_enc = super(Builder, self).prepare_markup(*args, **kwargs) 

     # do markup massaging ... 

     return markup, user_enc, doc_enc 

soup = BeautifulSoup(html, builder=Builder()) 
+0

堅實的回答,謝謝! – 2011-12-25 04:15:22