-3

重複の可能性:
Python Parsing Source Code (Python) Approach を使用して HTML ファイルからテキストを抽出する方法
: Beautiful Soup、lxml、html5lib の違いは?

現在、ソース コードが 200,000 行のほぼすべて (すべてではないにしても) の HTML である大きな Web ページがあります。より具体的には、コンテンツが改行で区切られた数千ブロックのテキストである Web ページです (ただし、改行は具体的にコンテンツの区切りを意味するわけではありません)。

私の主な目的は、Web ページをコピーしてテキスト エディターに貼り付けるように、ソース コードからテキストを抽出することです。私が使用したい別の解析関数があります。これは、もともとソース コードではなく、コピー/貼り付けされたテキストを取り込んだものです。

これを行うために、私は現在 urllib2 を使用しており、Beautiful Soup で .get_text() を呼び出しています。問題は、Beautiful Soup がコードに膨大な量の空白を残しており、結果を 2 番目の「テキスト」パーサーに渡すのが難しいことです。HTML の解析についてかなりの調査を行いましたが、率直に言って、この問題を簡単に解決する方法がわかりません。さらに、lxml のようなインポートを使用してテキストを抽出する方法について少し混乱しています。

tl; dr: Web ページで [すべて選択]、[コピー]、[貼り付け] を行ったときのような結果を得る方法はありますか?

4

2 に答える 2

1

さまざまなタグのコンテンツを抽出するのではなく、HTML をテキストとしてレンダリングしたいようです。

その場合は、次のいずれかをPython コードのサブプロセスとして実行することを検討してください。

  • links -html-numbered-links 1 -html-images 1 -dump "file://$@"
  • lynx -force_html -dump "$@"
  • w3m -T text/html -F -dump "$@"
于 2012-06-08T05:01:14.793 に答える
0

HTMLパーサーを調べてみてください。タグ表記のないhtmlページの要点だけが必要な場合は、次を使用できます。

from HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.tags = []
        self.attrs = []
    def handle_starttag(self, tag, attrs):
        self.tags.append(tag)
        self.attrs.append(attrs)
    def handle_endtag(self, tag):
        if tag not in self.tags:return
        for x in reversed(self.tags):
            self.tags.pop()
            self.attrs.pop()
            if tag == x:return
    def handle_data(self, data):
        print data

parser = MyHTMLParser()
f = file("temp.html")
parser.feed(f.read())
f.close()

これにより、htmlページ内のデータが解析されます。<div><h1>This is my webpage</h1><div></div></div>として印刷されThis is my webpageます。さまざまなセクション、さまざまな形式などを表示するメソッドを変更できます。基本クラスを好みに合わせて変更するだけで、私のコードで正しいパスを開始できます。

于 2012-06-08T06:05:53.173 に答える