2017-03-02 4 views
0

を維持し、散在太字タグでHTMLからテキストを抽出する:私は、XPathを使用してい私は次のような構造のHTMLファイルからテキストを抽出しようとしていますため

<td class='srctext> 
<pre> 
    <b> Heading 1 </b> 
    text 
    more text 
    <b> Heading 2 </b> 
    even more text, 
    <b> also some bold text </b> 
    and the last text 
</pre> 

をこれを行うには、以下のような

//td[@class='srctext]/pre/b 

は私がすべてボールドタグの内部テキストを取得し、これを行う、と私は、文字列()のラッパーを使用することにより、前の全体の内部テキストを取得することができます。

[ 
    'Heading 1', 
    'text \n more text', 
    'Heading 2', 
    'even more text', 
    ... 
] 

何かが不明であるかどうか尋ねることを躊躇しないでください:私がやるのに苦労していますしかし何

は、のような結果を得ています。

答えて

0

//td[@class='srctext']/pre//text()[normalize-space()]をXPathとして試してください(例:lxmlで完全なXPath 1.0をサポートしており、制限付きElementTree XPathサポートではないことを前提としています)。

全例が

from lxml import etree as ET 
html = '''<html><body><table><tr><td class=srctext> 
<pre> 
    <b> Heading 1 </b> 
    text 
    more text 
    <b> Heading 2 </b> 
    even more text, 
    <b> also some bold text </b> 
    and the last text 
</pre> 
</body> 
</html>''' 

htmlEl = ET.HTML(html) 
textValues = htmlEl.xpath("//td[@class='srctext']/pre//text()[normalize-space()]") 
print(textValues) 

出力私が正しくあなたの質問を理解していれば、あなたはHTMLカルコゲノフルバレン骨格を無視し、リスト内のテキストの一部を抽出したい

[' Heading 1 ', '\n text\n more text\n ', ' Heading 2 ', '\n even more text, \n ', ' also some bold text ', '\n and the last text\n'] 
0

、各リスト要素があることですタグを含まない文字列。

通常、正規表現を使用してXMLやHTMLを解析するのはひどい考えですが、この質問はまれな使用例の1つです。あなたは、単一の文字列内のすべてのファイルを読んでいると仮定:

[ i.strip() for i in re.findall(r'(.*?)<.*?>', t, re.DOTALL) if len(i.strip()) > 0] 

は期待通りになります:

['Heading 1', 'text\n more text', 'Heading 2', 'even more text,', 'also some bold text', 'and the last text'] 
関連する問題