【问题标题】:Recursively scan all links in a website递归扫描网站中的所有链接
【发布时间】: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


【解决方案1】:

我可以向您推荐一个来自 this post 的简单网络爬虫的想法。

【讨论】:

    猜你喜欢
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 2017-09-16
    • 2010-11-02
    • 1970-01-01
    相关资源
    最近更新 更多