XPATH の理解を深めようとしています。多くの要素を含むドキュメントがあります。太字の特定のテキストを含むドキュメント内のフォント要素を探しています。
div 要素内の font 要素の例を次に示します。font 要素には、キャプチャしたい太字のテキストがあります
<div style="line-height:120%;padding-bottom:10px;padding-top:10px;font-size:10pt;"><font style="font-family:inherit;font-size:10pt;font-weight:bold;">SECTION 1. Executive Summary</font></div>
はっきりさせておきますが、これははるかに大きな文書の一部です。XPATH チュートリアルを見つけて、特定の要素を選択する方法を説明しました
ファイルの読み取り方法で問題が発生していないことを確認するためだけに
tree=html.fromstring(open('c:\\mytest.htm')
x=tree.xpath('//font')
x には 3023 個の要素があるため、これは機能し、それらを調べたところ、それらはすべてフォント要素であることがわかりました。いくつかは私が欲しい要素でした。
次に、関連する要素を分離しようとしました
my_elements = tree.xpath('//font[@font-weight='bold']')
my_elements が空であるため、これは機能しませんでした。この質問を書いている間、私はhtmlのスニップを詳しく見て、IDLEでいくつか遊んでいました。問題は、font タグ font-weight の属性がないことだと思います。font-weight は style 属性に関連するものです。この例の font タグの唯一の属性は style です。もっと言いたいけど水が濁りすぎて怖い
要するに、xpath を使用して、太字でテキストにセクションという単語があるすべてのフォント要素を見つけられるようにしたいのですが、要素を反復処理して非常に厄介な方法でテストすることでこれを行うことができます
my_elements = [e for e in tree.iter() if e.tag == 'font' if 'bold' in e.values()[0] ]
my_elements = e for e in my_elements if 'section' in e.text_content().lower()
XPATH は、理解する価値があるように見えます。
説明をありがとう。
うーん、私はついに正しい軌道に乗っています
testelem=tree.xpath('//font[contains(@style,"font-weight:bold")]')
では and 演算子を使用します
testelem=tree.xpath('//font[contains(@style,"font-weight:bold") and contains(text(),"SECTION")]')
大文字と小文字を区別しないようにします
contains がどのように機能するかを理解することに近づいていますが、解決策を提示してくれる人には満足しています
testelem=tree.xpath('//font[contains(@style,"font-weight:bold") and starts-with(translate(text(),"SECTION","section"),"section")]')