3

次のWebページにこのURLのリストがありますが、URLを取得してArrayListに追加するにはどうすればよいですか?

http://www.manta.com/mb?search=US+Cellular&refine_company_loctype=B

私はそれを自分でやってみましたが、何らかの理由でここに結果が得られなかったのはコードです

using (var wc = new WebClient())
{
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();

    doc.LoadHtml(wc.DownloadString("http://www.manta.com/mb?search=U.S.+Cellular&refine_company_loctype=B"));

    var links = doc.DocumentNode.SelectSingleNode("//div[@class='clear']")
        .Descendants("a")
        .Select(x => x.Attributes["href"].Value)
        .ToArray();

    foreach(var item in links)
    {
        Response.Write(item.ToString()+"---new line---<br/>");
    }
}
4

1 に答える 1

1

まず第一に、あなたがスクレイプしようとしているWebサイトは、キャプチャやWebサイトへの多くの要求に対するタイムアウトで保護されています。

したがって、それを考慮に入れる必要があります。この場合、divなしで別のWebページになります。

次に、SelectSingleNodeによってドキュメントから1つのノードのみを選択しているため、1つのノードのみが返されます。

したがって、次のコードを試してください。

using (var wc = new WebClient())
{
    HtmlDocument doc = new HtmlDocument();

    doc.LoadHtml(wc.DownloadString("http://www.manta.com/mb?search=U.S.+Cellular&refine_company_loctype=B"));                

    var divs = doc.DocumentNode.SelectNodes("//div[@class='clear']");

    if (!divs.Any())
        Response.Write("Not found or timeout protection mechanism");

    foreach (var item in divs)
    {
        HtmlNode link = item.Descendants("a").FirstOrDefault();
        Response.Write(link.GetAttributeValue("href", string.Empty));
    }
}
于 2012-08-26T12:27:38.750 に答える