我正在研究网络爬虫。为此,我正在使用 Webbrowser 控件。我有存储在数据库中的 url 列表,我想一个一个地遍历所有这些 url 并解析 HTML。
我使用了以下逻辑
foreach (string href in hrefs)
{
webBrowser1.Url = new Uri(href);
webBrowser1.Navigate(href);
}
我想在页面完全加载后在“webBrowser1_DocumentCompleted”事件中做一些工作。但是“webBrowser1_DocumentCompleted”没有得到控制,因为我在这里使用循环。它仅在“hrefs”中的最后一个 url 被导航并且控件退出循环时获得控件。
处理此类问题的最佳方法是什么?
请您参考如下方法:
将列表存储在您所在州的某处,以及您已到达的位置的索引。然后在 DocumentCompleted 事件中,解析 HTML,然后导航到下一页。
(就我个人而言,我不会使用 WebBrowser 控件进行网络爬行...我知道这意味着它会为您处理 JavaScript,但是要很好地并行化会困难得多比使用多个 WebRequest 或 WebClient 对象。)
