2016-07-30 6 views
0

以下の入力の場合、lxmldivpであることがわかるかのようにdivを変更します。lxmlが空のdivを予期して検出していません

誰でもこのタイプの入力に<div></div>を取得する方法を教えてもらえますか?私は入力HTMLを修正したい。

BeautifulSoupに切り替える必要がありますか?

from lxml import etree 

html_string = """ 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
    <p align="center"> 
    <div></div> 
    This line should be centered. 
    </p> 
    <table> 
    <tbody> 
     <tr> 
     <td> 
     <div></div> 
     </td> 
     </tr> 
    </tbody> 
    </table> 
</body> 
</html> 
""" 

html_element = etree.fromstring(html_string) 

page_break_elements = html_element.xpath("//div") 

(Pdb) etree.tostring(html_element[1][0][0]) 
b'<div/>\n This line should be centered.\n ' 

私はちょうどその要素を動かすだけです。好奇心旺盛な人のため

<div></div> 

、これらはページ区切りを指定するPDF生成<div style="page-break-after:always"></div>に使用改ページdiv秒です。 TinyMCEから正しく入力されていないので、body要素に移動しようとしています。

あなたがのtoStringの行動を(変更するには、いくつかの追加の引数を渡す必要があり

from lxml import etree 

html_string = """ 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
    <div></div> 
    <p align="center"> 
    This line should be centered. 
    </p> 
    <div></div> 
    <table> 
    <tbody> 
     <tr> 
     <td> 
     </td> 
     </tr> 
    </tbody> 
    </table> 
</body> 
</html> 
""" 
+0

私はBeautifulSoupを使用し、目標を達成するためのコードを書きました。http://codereview.stackexchange.com/questions/136402/correcting-a-div-used-for-page-break-inside-p-by-moving- to-the-body-element – Nishant

+0

divをさらに追加して、出力として期待できるものはありますか? –

+0

このようなdivはボディレベルに移動する必要があります。それが私の希望する出力です。私のコードレビューソリューションはそうだが、私はlxmlソリューションをテストしなければならない。 – Nishant

答えて

1

あなたはsoupparserでlxmlのを使用して、まだデータを処理することができますxパスなどで。

from lxml.html.soupparser import fromstring 

html_element = fromstring(html_string) 

これはp内に<div></div>を維持します。

+0

@Padriac、これはlxmlでこれがうまくいく理由はありますか?なぜこの違い? – Nishant

+0

@Nishant、libxml2は、あなたが適切に構造化されたHTMLを提供しようとします.Supparserを使うと、もっと寛大です。あなたがドキュメントのmeta/headの例を見ると、それはあなたの問題とほぼ同じです。 –

0

を所望の出力):

etree.tostring(d, method="html", with_tail=False) 
'<div></div>' 
+0

私の問題は 'tostring'ではありません。私はpage_break_elementsを独立させて別の場所に転送できるようにしたかったのです。私はBeautifulSoupを使って誰もがレビューできる解決策を作りました。 – Nishant

+1

ええ、lxmlには限界があります。構文をチェックする方法は、精巧なHTML文書でうまく機能しません。 – mljli

+0

なぜこれについて下降票が、しかしこれが尾であるかは、私が取り組むための重要なインプットです。 https://docs.python.org/2/library/xml.etree.elementtree.html#xml.etree.ElementTree.Element.text。これは良い答えです。 – Nishant

関連する問題