3

製品のデータベースをスクレイピングしていますが、いくつかの固有のアイテムがあるため、すべてのHTMLを取得し、ほとんどの値を取得できます。しかし、私は共通のタグがあるいくつかの領域で立ち往生しています。

例:

<div class="label">Name:</div><div class="value">John</div>
<div class="label">Age:</div><div class="value">24</div>

これらのラベルと関連する値を取得する方法についてのアイデアはありますか?

役立つかもしれない何かがそこにあるなら、私は残りのためにHTMLAgilityPackを使用しています。

4

3 に答える 3

3

xpath を使用して、クラスをラベルとして、クラスを値として div を取得してください

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(yourHtml);

Dictionary<string, string> dict = new Dictionary<string, string>();

//This will get all div's with class as label & class value in dictionary

int cnt = 1;
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//div[@class='label']"))
{
    var val = doc.DocumentNode.SelectSingleNode("//div[@class='value'][" +  cnt + "]").InnerText;

    if(!dict.ContainsKey(node.InnerText))//dictionary takes unique keys only
    {
        dict.Add(node.InnerText, val);
        cnt++;
    }
} 
于 2012-07-18T20:34:23.530 に答える
0

あなたはこれを試すことができます:

Int32 endingIndex;
var Name1 = GetTextBetween(yourHtml, "<div class=\"label\">", "</div><div class=\"value\">", out endingIndex);
var Value1 = GetTextBetween(yourHtml.SubString(endingIndex), "<div class=\"value\">", "</div>", out endingIndex);
var Name2 = GetTextBetween(yourHtml.SubString(endingIndex), "<div class=\"label\">", "</div><div class=\"value\">", out endingIndex);
var Value2 = GetTextBetween(yourHtml.SubString(endingIndex), "<div class=\"value\">", "</div>", out endingIndex);


public static String GetTextBetween(String allDataToParse, String startText, String endText, out Int32 indexOfEndText)
{
    var indexOfStartText = allDataToParse.IndexOf(startText);
    indexOfEndText = allDataToParse.IndexOf(endText);

    return allDataToParse.Substring(indexOfStartText, indexOfEndText - indexOfStartText).Replace(startText, String.Empty) ;
}
于 2012-07-18T20:57:13.187 に答える
0

XPath は常に優れたアイデアのように聞こえますが、データをスクレイピングしているときは、HTML が適切に形成されているとは限りません。多くの Web ページは定期的に HTML を壊して、スクレイピングを困難にしています。マークのコードはぎこちなく見えますが、実際にはより堅牢な場合があります。

悲しいことに、プロバイダーが長期間にわたって信頼できることが証明されている場合にのみ、ターゲット ドキュメントの一貫性を信頼できます。理想的には、正規表現を使用して、具体的に必要なタグを検索します。良い出発点は次のとおりです。

タグ属性を抽出するための正規表現

残念ながら、作業中のドキュメントの正確な癖を知っているのはあなただけです。Mark が提案するような単純な解決策は、表示しているページが信頼できるものであればうまくいくでしょう。率直に言って、壊れやすく、予期せずクラッシュする可能性は低くなります。

HatSoft が提案する HTML ドキュメント解析コードを使用すると、プログラムはほとんどのドキュメントで問題なく動作する可能性がありますが、私の経験では、Web サイトがランダムにエラーをスローしたり、レイアウトが予期せず変更されたり、ネットワーク コードが部分的な文字列しか受信しないことがあります。おそらくこれで問題ありませんが、両方のアプローチを試して、どちらがより信頼できるかを確認することをお勧めします。

于 2012-07-18T22:33:01.553 に答える