【发布时间】:2015-04-28 08:34:45
【问题描述】:
我用 C# 构建了一个抓取工具,它从链接中抓取所有页面以及其他数据,并尝试重新创建网站。我想让它递归地扫描所有链接,在链接内,在链接内,直到所有链接(我感兴趣的)都被处理。
这是我的代码:
private void get_pages_2()
{
// _repository.get_all_pages() gives me all the pages scraped so far (only from homepage)
foreach (Page p in _repository.get_all_pages())
{
try
{
do_subpage(p.get_original_url());
}
catch (System.Net.WebException)
{
}
catch (Exception e)
{
_frm.update_log("[!] Error creating subpage for: " + p.get_original_archive_url());
_frm.update_log("[!] Error: " + e.ToString());
}
}
}
private void do_subpage(string link)
{
List<Page_link> pages = new List<Page_link>();
try
{
pages = get_pages(link);
}
catch (Exception)
{
return;
}
if (pages.Count == 0)
return;
// do_subpage(...);
// should call again do_subpage(some_link), but got stuck here
}
函数 do_subpage 将链接作为参数,使用 get_pages 函数,我得到了我感兴趣的所有链接,现在我应该以某种方式在所有链接上调用 do_subpage ...但不知道如何。
欢迎提出任何建议。
【问题讨论】:
-
你不能对那些
pages做一个foreach并访问每个链接吗?注意“返回上一页”链接,这会让你陷入无限循环! (也许保留“已访问页面”的列表) -
@HansKesting 我不能真正在页面上进行 foreach,因为它会刮掉所有新页面的链接,但它不会走得更远,它会在 3 次迭代后停止,并且我需要它工作,直到一切都处理完毕。存储库对象会跟踪我访问过的页面。
-
Page_Link的定义是什么? -
Page_Link 是一个对象,其中包含有关页面实际处理之前的一些信息。
-
是否包含页面中的所有链接?
标签: c# recursion web-scraping screen-scraping