私は現在、少しアイデアがありません。ヒントを教えていただければ幸いです。サンプルコードの小さな断片で私の質問を説明するのがおそらく最善です。
from lxml import etree
from io import StringIO
testStr = "<b>text0<i>text1</i><ul><li>item1</li><li>item2</li></ul>text2<b/><b>sib</b>"
parser = etree.HTMLParser()
# generate html tree
htmlTree = etree.parse(StringIO(testStr), parser)
print(etree.tostring(htmlTree, pretty_print=True).decode("utf-8"))
bElem = htmlTree.getroot().find("body/b")
print(".text only contains the first part: "+bElem.text+ " (which makes sense in some way)")
for text in bElem.itertext():
print(text)
出力:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<body>
<b>text0<i>text1</i><ul><li>item1</li><li>item2</li></ul>text2<b/><b>sib</b></b>
</body>
</html>
.text only contains the first part: text0 (which makes sense in some way)
text0
text1
item1
item2
text2
sib
私の質問:
"text2"
直接アクセスするか、親タグにあるものだけを含むすべてのテキスト部分のリストを取得したいと思います。これまでのところitertext()
、表示される のみが見つかりました"text2"
。
取得できる他の方法はあります"text2"
か?
なぜこれが必要なのかと疑問に思われるかもしれませんitertext()
:
- 要素の子で見つかったすべてのテキストを含むリストを作成します
- ただし、別の関数で検出されたテーブルとリストを処理したい (これにより、次のようなリスト構造が作成されます:
["text0 text1",["item1","item2"],"text2"]
またはテーブル (1. 1 列の行、2. 2 列の行):["1. row, 1 col",["2. row, 1. col","2. row, 2. col"]]
)
たぶん私は完全に間違ったアプローチを取っていますか?