2012-02-23 5 views
3

私はウェブサイトから情報を解析するために切り抜きを使用しようとしていますが、私は主にHTMLタグを使用してさまざまなテキストを識別します。HTMLタグを使用しないで問題の掘り下げウェブサイトを切り分ける

たとえば、以下はHTMLタグを使用して分離することは困難です(プログラムはこのサイトでは機能しません)。著者、タイトルなどをどのように分けることができますか?

import urllib 

from pyparsing import * 

paraStart,paraEnd = makeHTMLTags("p") 

# read HTML from a web page 
serverListPage = urllib.urlopen("http://www.cs.cf.ac.uk/contactsandpeople/allpubs.php?emailname=C.L.Mumford") 
htmlText = serverListPage.read() 
serverListPage.close() 

para = paraStart + SkipTo(paraEnd).setResultsName("body") + paraEnd 


for tokens,start,end in para.scanString(htmlText): 
    print tokens.body,'->',tokens.href 

私はpyparsingに比較的新しいですし、この例のための図書&ウェブを通じて見てきました。どんな助けでも大歓迎です。ありがとう。

編集:私はプログラムを実行すると、私は次を得る: 私は(「LI」)に(「P」)から検索する変更した場合、しかし、ナビゲーションメニューに

をスキップコンテンツ へスキップするために別のサイトでは、ブロック内の情報をプルします。

+0

コメントを編集して、そのクエリから返されるテキストのサンプルを含めることができますか? – PaulMcG

答えて

3

データを削っているウェブページのコンテンツについてもっと知る必要があります。あなたが盲目的にタグタグ付けパーサをページに投げ込むだけでは、テキストのランダムな塊が得られます。

スクリプト全体がHTML(スクリプト内で変数htmlTextにキャプチャされます)を印刷して、興味のあるデータを指すテキストのパターンを探してみてください。データそのものはパターンの一部である可能性があります、 大丈夫。 <>内のテキストのビットはHTMLタグです - 理由は、makeHTMLTagsメソッドは、と大きく異なります。は、予期しない順序で予期しない順序で予期しない属性または予期しない属性大文字小文字、または予期しない空白 - makeHTMLTagsはすべてのことを網羅しています。そのため、pyparsingで書かれたほとんどのWebスクレイパーは、このメソッドを使用して興味のあるデータに到達するパターンを定義します。

このプロセスを試してください:htmlTextを印刷してください。青色のハイライターを使用して、必要なデータを強調表示します。次に、周囲のデータやそのデータの検索に役立つタグを識別する黄色のハイライターを使用します。今、あなたはそのデータを抽出するためにあなたのpyparsing式を構築する方法に関するテンプレートを持っています。結果名(パーサーの 'body'定義)を既に使用し始めました。これは良い習慣であり続けます。青いテキストのすべての式に結果の名前を付けると、全体のパターンが一致した後に名前を使用して個々のビットを取得できます。

幸運を祈る!

関連する問題