1

PythonでHTML解析を行う必要があります。いくつかの調査の後、lxml が私の最良の選択のようですが、私がやろうとしていることを助ける例を見つけるのに苦労しています。これが私が聞いている理由です。表示可能なすべてのテキストのページをスクレイピングする必要があります。すべてのタグと JavaScript を取り除きます。表示可能なテキストを残すために必要です。十分に単純に聞こえます..私はHTMLParserでそれを行いましたが、JavaScriptをうまく処理していません

class HTML2Text(HTMLParser.HTMLParser):
    def __init__(self):
        HTMLParser.HTMLParser.__init__(self)
        self.output = cStringIO.StringIO()

    def get_text(self):
        return self.output.getvalue()

    def handle_data(self, data):
        self.output.write(data)

def ParseHTML(source):
    p = HTML2Text()
    p.feed(source)
    text = p.get_text()
    return text

lxmlでこれを行う方法、またはHTMLParserを使用するより良い方法についてのアイデア..追加のライブラリが必要ないため、HTMLParserが最適です..みんなに感謝します

スコット F.

4

5 に答える 5

4

私が知っている「Javascript でうまくいく」画面スクレイピング ライブラリはありません。

于 2009-05-02T05:47:06.650 に答える
2

scare.pyはあなたのためにこれを行うことができます。

それは次のように簡単です:

import scrape
s = scrape.Session()
s.go('yoursite.com')
print s.doc.text

このビデオの約2:40にジャンプして、scrap.pyの作成者からのすばらしい概要を確認してください: pycon.blip.tv/file/3261277

于 2010-04-08T21:02:24.197 に答える
0

あなたのコードは賢く、ある程度柔軟だと思います。

<script>ブロックを抑制するために単にhandle_starttag()とhandle_endtag()を追加するのはどうですか?

class HTML2Text(HTMLParser.HTMLParser):
    def __init__(self):
        HTMLParser.HTMLParser.__init__(self)
        self.output = cStringIO.StringIO()
        self.is_in_script = False
    def get_text(self):
        return self.output.getvalue()
    def handle_data(self, data):
        if not self.is_in_script:
            self.output.write(data)
    def handle_starttag(self, tag, attrs):
        if tag == "script":
            self.is_in_script = True
    def handle_endtag(self, tag):
        if tag == "script":
            self.is_in_script = False

def ParseHTML(source):
    p = HTML2Text()
    p.feed(source)
    text = p.get_text()
    return text
于 2009-09-05T14:47:08.087 に答える
0

BeautifulSoup ( http://www.crummy.com/software/BeautifulSoup/ ) は、多くの場合、python html スクレイピングに関する質問に対する正しい答えです。

于 2009-05-02T08:33:29.900 に答える
0

解析対象のページで実行中の JavaScript を処理する Python HTML 解析ライブラリを私は知りません。Alex Martelli などによって与えられた理由により、「十分に単純」ではありません。

このタスクでは、単に HTML を解析するだけでなく、Web アプリケーションのテスト フレームワークを調べるよりも高いレベルに進むことを考える必要があるかもしれません。

JavaScript を実行でき、Python ベースであるか、Python とインターフェースできる 2 つ:

残念ながら、これらのフレームワークの「単体テスト」指向によって、実際に可視テキストを削り取ることができるかどうかはわかりません。

したがって、他の唯一の解決策は、 python-spidermonkeyをアプリに統合するなどして、自分で行うことです。

于 2009-05-02T09:40:04.577 に答える