0

Html Agility Pack を使用して、Google 検索結果の基本的な Web スクレイピングを実行しています。XPath の初心者として、(FirePath の助けを借りて) パス式が正しいことを確認します。ただし、返される HtmlNodeCollection は常に NULL です。

HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument htmlDoc = web.Load("http://www.google.com/search?num=10&q=Hello+World");

// get search result URLs
var items = htmlDoc.DocumentNode.SelectNodes("//div[@id='ires']/ol[@id='rso']/li/div[@class='vsc']/h3/a/@href");

foreach (HtmlNode node in items)
{
    Console.WriteLine(node.Attributes);
}

何か不足していますか?誰でも私を啓発してもらえますか?

前もって感謝します、

4

1 に答える 1

0

HAP は、URL から返された生の HTML のみを処理できます。ページ上にある追加の JavaScript などは実行しません。それに応じてクエリを調整する必要があります。

生の HTML にはiresdiv が存在しますがrso、javascript が実行されるまで挿入されないため、結果が得られません。ここで行われる他の変換もあり、同様に調整する必要があります。

HTML の一部を次に示します。

<div id="ires">
    <ol>
        <li class="g">
            <h3 class="r">
                <a href="...">...</a>

これに使用するより適切な xpath は次のようになります。

var xpath = "//li[contains(concat(' ',@class,' '),' g ')]" +
            "/h3[contains(concat(' ',@class,' '),' r ')]" +
            "/a/@href";

それらはすべての結果に対応するためli、クラスを使用してすべてを見つける方が簡単です。gクラスですべてをフィルタリングする必要があります。h3それr以外の場合は、他の結果 (画像の結果など) を含めます。

于 2012-08-28T18:17:54.157 に答える