0

Google の検索結果内のすべての URL を抽出する次のコードがあります。

    private void button1_Click(object sender, EventArgs e)
    {
        HtmlElementCollection a = webBrowser1.Document.GetElementsByTagName("a");
        foreach (HtmlElement b in a)
        {
            string item = b.GetAttribute("href");
            if (item.Contains("url?q=")) 
            {
            listBox1.Items.Add(item);
                }
        }
    }

ただし、これをより具体的にする必要があります。

Google の Chrome 要素インスペクターにはこれがあり、この要素の URL にアクセスする必要があります。

<cite class="_Rm">www.dicksmith.com.au/apple-<b>ipad</b></cite>

クラスは「_Rm」で、「cite」タグにあり、その URL のみが必要です。

4

1 に答える 1

0

指定された 'class' および 'tag' 値を持つ html 要素を検索します。次に、InnerHtml から URL を取得します。

HtmlElement FindHtmlElement(string tag, Predicate<HtmlElement> predicate)
{
    try
    {            
        var elements = webBrowser1.Document.GetElementsByTagName(tag);
        foreach (HtmlElement element in elements)
        {
            if (predicate(element))
            {
                return element;
            }
        }
    }
    catch (Exception ex)
    {
        //Log.Error("Error on finding html element on {0}. Exception: {1}", _webBrowserBot.Url.ToString(), ex.Message);
    }

    return null;

}

private void button1_Click(object sender, EventArgs e)
{
    // search for <cite class="_Rm">www.dicksmith.com.au/apple-<b>ipad</b></cite>
    var element = FindHtmlElement("cite", (h) =>
    {
        return h.GetAttribute("class") == "_Rm";               
    });

    string url = "";
    if (element != null)
    {
        // retrieve url only
        int ix = element.InnerHtml.IndexOf("-<b>");
        if (ix > 0)
            url = element.InnerHtml.Remove(ix);

        // url obtained
        //...
    }
}
于 2015-08-02T10:19:06.077 に答える