シンプルなHTML解析ライブラリ

最近リリースされたLeafは、PythonでHTMLを解析するための小さなライブラリです。

かなり長い間、私の解析ニーズをすべてカバーしてきましたが、まだ開発のアイデアがあります。

このライブラリは、本質的にlxmlのラッパーであり 、これにより、操作がより快適になります。



機能





説明



htmlを解析するには、その行をleaf.parseに渡す必要があります。

import leaf document = leaf.parse(sample) links = document ( 'div#menu a' ) # CSS link = document .get( 'div#menu a' ) # None ( ) * This source code was highlighted with Source Code Highlighter .



  1. import leaf document = leaf.parse(sample) links = document ( 'div#menu a' ) # CSS link = document .get( 'div#menu a' ) # None ( ) * This source code was highlighted with Source Code Highlighter .



  2. import leaf document = leaf.parse(sample) links = document ( 'div#menu a' ) # CSS link = document .get( 'div#menu a' ) # None ( ) * This source code was highlighted with Source Code Highlighter .



  3. import leaf document = leaf.parse(sample) links = document ( 'div#menu a' ) # CSS link = document .get( 'div#menu a' ) # None ( ) * This source code was highlighted with Source Code Highlighter .



  4. import leaf document = leaf.parse(sample) links = document ( 'div#menu a' ) # CSS link = document .get( 'div#menu a' ) # None ( ) * This source code was highlighted with Source Code Highlighter .



import leaf document = leaf.parse(sample) links = document ( 'div#menu a' ) # CSS link = document .get( 'div#menu a' ) # None ( ) * This source code was highlighted with Source Code Highlighter .





さらに、要素属性へのアクセスがより便利になりました。





  1. link.onclickを印刷
  2. link.idを印刷
*このソースコードは、 ソースコードハイライターで強調表示されました。


すべての標準lxmlメソッド利用可能です(そして、それらの実行の結果として得られる要素は、ライブラリのすべての利点を保持します):





  1. link = document .xpath( 'body / div / ul / li [@ class = "active_link"]' )[0]
  2. link.get( 'a' ).text
*このソースコードは、 ソースコードハイライターで強調表示されました。


おそらく、おそらく最も興味深い機能は、htmlからbbcodeおよび他のマークアップ言語への変換です。 将来、一般的なマークアップ言語に変換するメソッドが追加されますが、現時点では、目的のメソッドの関数を非常に簡単に作成できます。





  1. #htmlから特定のものへのコンバーター関数の例
  2. #サポートのみを行うマークアップ言語
  3. #[url] [/ url]で囲まれたリンク
  4. def omgcode_formatter(要素、子):
  5. #<br>を改行文字に置き換えます
  6. element.tag == 'br'の場合
  7. '\ n'を 返します
  8. #[url] [/ url]のリンクを突く
  9. element.tag == 'a'の場合
  10. return u "[url = link}] {text} [/ url]" .format(link = element.href、text = children)
  11. #他のすべての要素については、結果を返します
  12. #すべての子を処理します。
  13. 子供の場合
  14. 子供を返す
*このソースコードは、 ソースコードハイライターで強調表示されました。


この関数は、要素(タグのhtml要素)と子(この要素のすべての子に対してこの関数を実行した結果)をパラメーターとして、再帰的に呼び出されます。

要素を変換するには(ところで、別のレイヤーとツリー全体の両方を使用できます):





  1. document .parse(omgcode_formatter)
*このソースコードは、 ソースコードハイライターで強調表示されました。


documentは、leaf.Parserクラスのオブジェクトです。

さて、テキストを操作するためのいくつかの関数:



to_unicode-文字列をUnicodeに変換する

strip_accents-文字列からアクセント、ウムラウトなどを削除する

strip_symbols-文字列からさまざまなUnicodeスペシャルを削除します。 キャラクターとか

strip_spaces-余分なスペースを削除する

strip_linebreaks-余分な改行を削除する



より詳細な例はテストにあります。

おわりに



ライブラリは次の場所にあります。




All Articles