2009-05-02 9 views
1

私はPythonでいくつかのHTML解析を行う必要があります。いくつかの研究の後、lxmlは私の最良の選択だと思われますが、私は何をしようとしているのかを助けてくれる例を見つけるのに苦労しています。これが私が聞いている理由です。私は、すべての表示可能なテキストのすべてのページをこすりする必要があります..すべてのタグとjavascriptを外します。私はそれを私はどのテキストが表示可能なままにする必要があります。十分に簡単に聞こえる..私はHTMLParserでそれをやったが、そのはありませんので、lxmlのでこれを行う方法や、それを行うには良い方法HTMLParser .. HTMLParserのための任意のアイデアがベストだろう Python lxmlのスクリーンスクレイピング?

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 

もjavascriptの

を処理していません追加LIBSは...おかげでみんな

スコットF.

答えて

4

私は「JavaScriptでもない」知っているんスクリーンスクレイピングのライブラリを必要としている - それは、JSは、HTML DOMを変更することができているすべての方法を予測するためにあまりにも難しいです動的に、条件付きで& c。

0

私は、解析中のページで実行中のjavascriptを処理するPython HTML解析ライブラリは知りません。アレックス・マルテッリなどの理由で「シンプル」ではありません。

このタスクでは、HTMLを解析するだけでなく、Webアプリケーションのテストフレームワークを参照するよりも上のレベルに進むことを検討する必要があります。 JavaScriptを実行することができますし、PythonがベースとされているいずれかのやPythonとインターフェースすることができる

2:

"単体テスト" の向き場合残念ながら、私はわからないんだけどこれらのフレームワークのうち、実際には目に見えるテキストを掻き出すことができます。

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

0

あなたのコードはスマートで非常に柔軟性があると思います。

<スクリプト>ブロックを抑制する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 
2

scrape.pyがこれを行うことができます。

それは同じくらい簡単です:scrape.pyのクリエイターから素晴らしい概要については、このビデオでは、約2時40へ

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

ジャンプ: pycon.blip.tv/file/3261277

関連する問題