web-dev-qa-db-ja.com

HTML Parsingの意味?

Simple HTML DOMやHTML ParserなどのHTML Parserライブラリについて聞いたことがあります。 HTML解析を含む質問も聞いたことがあります。 HTMLを解析するとはどういう意味ですか?

13
LightningBoltϟ

スパッドリーが言ったこととは異なり、解析は基本的に 構成部分に(文を)解決し、それらの構文上の役割を説明します。

ウィキペディアによると、構文解析または構文解析は、自然言語またはのいずれかでシンボルの文字列を分析するプロセスです)コンピュータ言語、正式な文法のルールに従って。構文解析という用語は、ラテン語の構文(orationis)に由来し、(音声の)部分を意味します。

あなたの場合、HTML解析は基本的に:HTMLコードを取り込み、ページのタイトル、ページの段落、ページの見出し、リンク、太字のテキストなどの関連情報を抽出します。

パーサー:

コンテンツを解析するコンピュータープログラムは、パーサーと呼ばれます。一般に2種類のパーサーがあります。

トップダウン解析-トップダウン解析は、以下を使用して解析ツリーを検索することにより、入力ストリームの左端の派生を見つける試みと見なすことができます指定された正式な文法規則のトップダウン展開。トークンは左から右に消費されます。包括的選択は、文法規則のすべての代替右側を拡張することにより、あいまいさを吸収するために使用されます。

ボトムアップ解析-パーサーは入力から始めて、それを開始記号に書き換えることができます。直感的に、パーサーは最も基本的な要素を探し、次にこれらを含む要素を探します。 LRパーサーは、ボトムアップパーサーの例です。このタイプのパーサーに使用される別の用語は、Shift-Reduce構文解析です。

パーサーの例:

トップダウンパーサー:

ボトムアップパーサー:

パーサーの例:

PythonでのHTMLパーサーの例を次に示します。

from HTMLParser import HTMLParser

# create a subclass and override the handler methods
class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        print "Encountered a start tag:", tag
    def handle_endtag(self, tag):
        print "Encountered an end tag :", tag
    def handle_data(self, data):
        print "Encountered some data  :", data

# instantiate the parser and fed it some HTML
parser = MyHTMLParser()
parser.feed('<html><head><title>Test</title></head>'
            '<body><h1>Parse me!</h1></body></html>')

出力は次のとおりです。

Encountered a start tag: html
Encountered a start tag: head
Encountered a start tag: title
Encountered some data  : Test
Encountered an end tag : title
Encountered an end tag : head
Encountered a start tag: body
Encountered a start tag: h1
Encountered some data  : Parse me!
Encountered an end tag : h1
Encountered an end tag : body
Encountered an end tag : html

参考文献

24
Anshu Dwibhashi

解析は一般にあらゆるコンピューター言語に適用され、コードをテキストとして受け取り、コンピューターが理解して操作できるメモリ内の構造を生成するプロセスです。

特にHTMLの場合、HTML解析は、生のHTMLコードを取得して読み取り、DOMツリーオブジェクト構造を生成するプロセスです。

7
Spudley