2017-01-19 13 views
2

ローカルデータベースにインポートする1​​0のニュースソースのリストがあるとします。私は、これらの外部ニュースページのそれぞれを開いて、メインのコンテンツを抽出し、それを保存する必要があります。これらのページのHTML構造はそれぞれ異なります。あるものはdivを使用し、他のものは記事タグを使用します。HTMLアジャイルパックを使用して動的コンテンツを抽出する

私はHttpWebRequestオブジェクトを使用してページを開き、HtmlAgilityPackを使用して[HTML]ドキュメントを読み込むことができます。

HttpWebRequest oReq = (HttpWebRequest)WebRequest.Create(url); 
HttpWebResponse resp = (HttpWebResponse)oReq.GetResponse(); 
var doc = new HtmlAgilityPack.HtmlDocument(); 
doc.Load(resp.GetResponseStream()); 

しかし、どのようにタイプを知らずに主要な要素をターゲットにできるかわかりません。

私も可能なことをしようとしていますか?

+1

ニュースサイトで、目的のデータを取得するためのAPIを提供しているかどうかを確認しましたか?そのようなサイトでは一般的にWebスクレイピングが嫌にされている(つまり許可されていない)。 –

+0

オプションは(プログラムで)他のページを見たり、ほとんどのテキストを持つ要素を見つけたり、ページ間で最も変化するテキストを探したり、その要素を対象とすることができます。あなたが望むものに近いところにあなたを近づけるかもしれませんが、完璧ではありません。あなたが本当に熱心であれば、ニューラルネットを書いて、多くのウェブサイトでそれを訓練し、主なコンテンツに対してそれらを検証することができます。しかし、とにかく、最初のオプションは実装がずっと簡単です:) –

+0

http://www.bing .com/newsやhttps://news.google.com/newsはこれが明らかに不可能になる前に完了していませんでした。さらに、このような「不可能な」システムを設計することは、あまりにも広すぎるので、ページ上で実際に検出したいものを絞り込むと、トピックになる可能性があります。 –

答えて

1

HTML Agility Packは非常に便利ですが、一般的に、このコードを使用するコードはサイトの構造に合わせてカスタマイズする必要があります。

ジェネリックで適応性があるようにすることはできますが、Evernoteのような「Big Boys」でさえ、サイトレイアウトごとに異なるクリッピングオプションが必要です。

私が見ていた最初のこと:ニュースの場合は、代わりにRSSフィードを使用する必要がありますか? (技術的にだけでなく、合法的にサイトの利用規約のセクションをチェックしてください)

サイトを解析する必要がある場合は、そのサイトを実装するサイトごとに別のクラスとインターフェイスを作成することをおすすめしますインタフェース。それぞれのクラスを調整して、それぞれのサイトの構造に合わせます。

+0

私は、インターフェイスと別のクラスを作成するという考えが好きです。 –

+0

さて、ちょっと、アップホントは常に高く評価されています。 :) –

関連する問題