我有以下代码,用于提取Google搜索结果中的所有网址:
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);
}
}
}
但是我需要更具体一点。
谷歌的Chrome元素检查员有这个,我需要访问此元素中的URL:
<cite class="_Rm">www.dicksmith.com.au/apple-<b>ipad</b></cite>
这个班级是&#34; _Rm&#34;,它在&#39; cite&#39;标记,我只需要该URL。
答案 0 :(得分:0)
使用指定的&#39;类&#39;查找html元素和&#39;标记&#39;值。然后从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
//...
}
}