私は、HTMLの構文解析のためにどのような言語/ツールを使用する必要がありますか?

StackOverflow https://stackoverflow.com/questions/581920

質問

私はからデータを抽出したいウェブサイトのカップルを持っているし、以前の経験に基づいて、これはそれが聞こえるほど簡単ではありません。どうして?私が持っているHTMLページが正しくフォーマットされていない解析するという理由だけで(など、タグを閉じ欠落している。)。

私は、私が使用することができる技術、言語やツールに関しては制約がないことを考慮すると、を簡単にHTMLページからのデータを解析して抽出するためにあなたの提案は、は何ですか?私は、HTML敏捷性パック、BeautifulSoupを試してみました、とさえこれらのツールは、(HTML敏捷性パックはバグがある、とBeautifulSoup解析エンジンは、私はそれに渡していたページでは動作しません)完璧ではありません。

ありがとうございます。

役に立ちましたか?

解決

あなたはかなりあなたが好きな任意の言語を使用することができますをちょうど試してみて、正規表現でHTMLを解析しません。

だから、私はそれを修正してくださいと言ってみましょう:それは最後の15年から20年に発明したほとんどすべてであるHTMLパーサを、持っているようにあなたは、任意の言語にあなたを使用することができます。

。 あなたは、特定のページで問題が発生した場合は、

私はあなたが HTML Tidyののでそれらを修復に見てください。

他のヒント

私はhpricot(コリン・ピカードによってリンク)がエースだと思います。ミックスにscrubytを追加し、あなたがルビーのテキストマッチング力を持つ偉大なHTMLのスクレイピングやブラウジングインターフェイスを取得 http://scrubyt.org /

ここ http://github.com/scrubberからいくつかのサンプルコードがあります/scrubyt_examples/blob/7a219b58a67138da046aa7c1e221988a9e96c30e/twitter.rbする

require 'rubygems'
require 'scrubyt'

# Simple exmaple for scraping basic
# information from a public Twitter
# account.

# Scrubyt.logger = Scrubyt::Logger.new

twitter_data = Scrubyt::Extractor.define do
  fetch 'http://www.twitter.com/scobleizer'

  profile_info '//ul[@class="about vcard entry-author"]' do
    full_name "//li//span[@class='fn']"
    location "//li//span[@class='adr']"
    website "//li//a[@class='url']/@href"
    bio "//li//span[@class='bio']"
  end
end

puts twitter_data.to_xml

言語Javaなどのオープンソースライブラリとして Jsoup のあなたのためにかなりのソリューションとなります。

hpricot のあなたが探しているものかもしれません。

あなたは、PHPののDOMDocument のクラスを試すことがあります。これは、ロードHTMLコンテンツのための方法をいくつか持っています。私は通常、このクラスを利用します。私はそれがないものを持っているし、Firebugの中で解析した後、結果のHTMLを検査する場合に、HTMLにDOCTYPE要素を付加することがある助言しています。無効なマークアップが検出されたいくつかのケースでは、のDOMDocumentは、HTML要素の再配置のビットを行います。また、ソース内の文字コードを指定するmetaタグがあるかどうマークアップを解析するとき、それはのlibxmlによって内部的に使用されることに注意してください。ここで少し例を示します。

$html = file_get_contents('http://example.com');

$dom = new DOMDocument;
$oldValue = libxml_use_internal_errors(true);
$dom->loadHTML($html);
libxml_use_internal_errors($oldValue);

echo $dom->saveHTML();

DOMレベルにHTMLで動作する任意の言語が良いです。

perlのためには、HTML :: TreeBuilderモジュールです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top