2

私は他の誰か(恐ろしい)コードベースを継承し、現在必死に問題を修正しようとしています。今日、それは私たちのテンプレート/ホームページにあるすべてのデッドリンクのリストを集めることを意味します。

私は現在PythonでElementTreeを使用しており、xpathを使用してサイトを解析しようとしています。残念ながら、htmlの形式が正しくないようで、ElementTreeはエラーをスローし続けます。

よりエラーに優しいxpathパーサーはありますか?ElementTreeを非厳密モードで実行する方法はありますか?このプロセスを支援するために使用できる、前処理などの他の方法はありますか?

4

4 に答える 4

5

LXMLは、不正な形式のHTMLを解析し、ElementTree APIの拡張バージョンを実装し、XPathをサポートします。

>>> from lxml import html
>>> t = html.fromstring("""<html><body>Hello! <p> Goodbye.</body></html""")
>>> html.tostring(t.xpath("//body")[0])
'<body>Hello! <p> Goodbye.</p></body>'
于 2012-05-25T15:35:44.900 に答える
3

私の同情!

HTMLをBeautifulSoupで解析したほうがよいでしょう。ホームページが述べているように:

あなたはそのひどいページを書きませんでした。あなたはそれからいくつかのデータを取得しようとしているだけです。美しいスープがお手伝いします。2004年以来、プログラマーはクイックターンアラウンドスクリーンスクレイピングプロジェクトの作業にかかる時間や日数を節約できました。

そして更に重要なことに:

Beautiful Soupは、あなたが与えたものをすべて解析し、ツリートラバーサルを実行します。「すべてのリンクを検索」、「クラスexternalLinkのすべてのリンクを検索」、「URLが「foo.com」と一致するすべてのリンクを検索」、または「太字のテキストが含まれるテーブル見出しを検索」と言うことができます。私にそのテキスト。」

于 2012-05-25T15:34:00.473 に答える
2

BeautifulSoupは、不正な形式のHTMLを非常にうまく処理できます。また、誤ってネストされた/閉じられていないHTMLタグを修正するにはどうすればよいですか?。そこで、Tidyも提案されました。

于 2012-05-25T15:33:55.290 に答える
1

これは少しOTですが、関心のあるリンクなので、外部リンクチェッカーを使用することもできます。

私はXenuLinkSleuthを何年も使用してきましたが、うまく機能します。15,000を超える内部ページがあり、LAN上でXenuを30の同時スレッドで実行しているサイトがいくつかあります。サイトの確認には約5〜8分かかります。すべてのリンクタイプ(ページ、画像、CSS、JSなど)がチェックされ、シンプルですが便利な除外メカニズムがあります。XP / 7で実行され、MSIEの認証があれば、サイトのメンバー/非メンバーのビューを確認できます。

注:管理者権限を持つアカウントにログインしている場合は実行しないでください。実行すると、舞台裏を忠実にさまよって、すべてのデータで削除を押し始めます。(はい、私は一度それをしました-幸いにも私はバックアップを持っていました。:-)

于 2012-05-25T15:57:53.223 に答える