2

かなり奇妙なページを解析しようとしています。簡略化されたバージョンは次のとおりです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
<html xmlns="http://www.w3.org/1999/xhtml">
    <form id="x" method="post" action="x">
        <input type="hidden" name="v1" value="v" />
            <html xmlns="http://www.w3.org/1999/xhtml">
                <input type="hidden" name="v2" value="v" />
            </html>
    </form>
</html>

はい、フォーム内に html タグがあります。

これは有効な (X)HTML ですか? これが (少なくとも部分的に) Java Server Faces を使用して行われたことは知っています。

実際の問題に関しては:

>>> BeautifulSoup(html).find("form")
<form id="x" method="post" action="x">
<input type="hidden" name="v1" value="v" />
</form>

BeautifulSoup はこれをまったく好まず、存在しないふりをしています。

誰かが似たようなことを経験しましたか? 生の XML を解析できると思いますが、可能であれば BeautifulSoup を使用したいと考えています。

4

2 に答える 2

3

出力をチェックせずに複数のサーバー ソースを組み合わせると、これが発生するのを見てきました。htmlドキュメントの途中 (タグ以外) でタグが有効になるシナリオはないと思いますiframe。あなたが投稿したスニペットは確かに有効ではありません (validator.w3.org)

不正なタグが予測可能な場所に表示された場合、文字列の置換は迅速な解決策であるため、後で適切に解析できます。

生のXMLを解析できると思います

ドキュメントが整形式の XHTML doctype に準拠している (つまり、有効な XHTML でなくても有効な XML である) と仮定すると、次のことができます。

  • ドキュメントを XML として解析する
  • マークアップを有効なものに変更します (たとえば、内部要素のラップを解除するか、または に変更しますdiv) 。
  • BeautifulSoup で HTML として解析します。
于 2013-02-02T06:22:58.730 に答える
0

誰かがこれを必要とする場合に備えて、動的な文字列置換をコーディングすることになりました(コメントで述べたように、固定位置で単純にカットすることはできません)

def fix_html_inside_html(html):
    i=html.index("<html")
    while True:
        try:
            i=html.index("<html", i+1)
            i2= html.index(">", i)
            i3= html.index("</html>", i)
            html= html[:i]+html[i2+1:i3]+html[i3+7:]
        except ValueError:
            break
    return html

html属性内に">"がある場合、これ失敗することに注意してください

于 2013-02-02T07:18:24.080 に答える