シンプルな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-余分な改行を削除する

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

おわりに


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


Source: https://habr.com/ru/post/J115135/


All Articles