6

以前の経験に基づいてデータを抽出したい Web サイトがいくつかありますが、これは思ったほど簡単ではありません。なんで?単純に、解析する必要がある HTML ページが適切にフォーマットされていないためです (終了タグがないなど)。

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

4

6 に答える 6

5

HTML を正規表現で解析しようとしないだけで、好きなほとんどの言語を使用できます。

言い換えると、HTML パーサーを備えた任意の言語を使用できます。HTML パーサーは、過去 15 ~ 20 年間にほとんどすべてが発明されたものです。

特定のページに問題がある場合は、 HTML Tidyで修復することを検討することをお勧めします。

于 2009-02-24T14:26:40.393 に答える
2

hpricot (Colin Pickard がリンク) はエー​​スだと思います。ミックスにスクラブを追加すると、Ruby のテキスト マッチング機能を備えた優れた 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
于 2009-02-24T14:48:38.343 に答える
2

言語 Java として、またオープン ソース ライブラリとして、Jsoupは非常に優れたソリューションとなります。

于 2013-01-04T12:28:55.623 に答える
0

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

于 2009-02-24T14:31:45.297 に答える
0

PHP のDOMDocumentクラスを試すことができます。HTML コンテンツをロードするためのメソッドがいくつかあります。普段はこのクラスを利用しています。私のアドバイスは、HTML に DOCTYPE 要素がない場合に備えて HTML の先頭に追加し、解析後に生成される HTML を Firebug で検査することです。場合によっては、無効なマークアップが検出されると、DOMDocument は HTML 要素を少し再配置します。また、ソース内の文字セットを指定するメタ タグがある場合は、マークアップの解析時に 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();
于 2009-02-24T14:45:57.493 に答える
0

DOM レベルで HTML と連携する言語であれば、どの言語でも問題ありません。

perl の場合、HTML::TreeBuilder モジュールです。

于 2015-09-09T21:17:50.317 に答える