【问题标题】:how to get html output page in ABOT C# Web Crawler?如何在 ABOT C# Web Crawler 中获取 html 输出页面?
【发布时间】:2013-09-12 15:08:04
【问题描述】:

我正在尝试在 c# 中使用 ABOT 制作网络爬虫。我搜索了很多示例并添加了 ABOT 网络爬虫。从中我只能得到日志输出而不是 Html 页面输出。我只想得到 html 页面输出。因为 HTML 输出是 HTML 敏捷工具的输入。 帮助我从 C# 中的 ABOT 网络爬虫获取 HTML 输出。 谢谢。

【问题讨论】:

    标签: c# web-crawler


    【解决方案1】:

    解释here on the quickstart page

    //Create an instance of the crawler and subscribe to the PageCrawlCompleted event
    PoliteWebCrawler crawler = new PoliteWebCrawler();
    crawler.PageCrawlCompleted += crawler_ProcessPageCrawlCompleted;
    
    //The event handler method
    void crawler_ProcessPageCrawlCompleted(object sender, PageCrawlCompletedArgs e)
    {
        CrawledPage crawledPage = e.CrawledPage;
    
        if (crawledPage.WebException != null || crawledPage.HttpWebResponse.StatusCode != HttpStatusCode.OK)
            Console.WriteLine("Crawl of page failed {0}", crawledPage.Uri.AbsoluteUri);
        else
            Console.WriteLine("Crawl of page succeeded {0}", crawledPage.Uri.AbsoluteUri);
    
    
        //crawledPage.Content.Text //raw html
        //crawledPage.HtmlDocument //lazy loaded html agility pack object (HtmlAgilityPack.HtmlDocument)
        //crawledPage.CSDocument   //lazy loaded cs query object (CsQuery.Cq)
    }
    

    【讨论】:

    • 我正在使用 v1.5.0 并且默认 PoliteWebCrawler / 默认 CrawlConfiguration 没有设置任何 DownloadableContentTypes 所以你需要确定并将其设置为类似:crawlConfig.DownloadableContentTypes = "text/html, text/plain, application/json"
    • @sjdirect crawledPage.RawContent 在上一个版本中已被弃用。那么我们如何获取原始的 html 字符串呢? e.CrawledPage.Content.ToString() 是另一种方式吗?
    • @guidomocha Content.Text 是访问原始 html 的方式。我更新了我的答案。
    【解决方案2】:
    void crawler_ProcessPageCrawlCompleted(object sender, PageCrawlCompletedArgs e)
    {
        CrawledPage crawledPage = e.CrawledPage;
        crawledPage.Content.Text // HTML
    
    }
    

    【讨论】:

    • 您可以为此添加一些上下文吗?与 sjdirect 的答案相比,这有什么不同? (除了更小。)
    • 他的答案太大了,我没有找到正确的属性。但他帮助我了解我可以上“ProcessPageCrawlCompleted”。然后我调试了那个事件并很快找到了答案。正如你所说,我的主要目标是最小化。如果我是访客,这就是我想看到的。
    【解决方案3】:

    仅获取 htmlpage 使用:

    crawledPage.Content
    

    函数内部

    `static void crawler_ProcessPageCrawlCompleted(object sender, PageCrawlCompletedArgs e)`
    

    例如:

    static void crawler_ProcessPageCrawlCompleted(object sender, PageCrawlCompletedArgs e)
        {
            CrawledPage crawledPage = e.CrawledPage;
    
            if (crawledPage.WebException != null || crawledPage.HttpWebResponse.StatusCode != HttpStatusCode.OK)
                Console.WriteLine("Crawl of page failed {0}", crawledPage.Uri.AbsoluteUri);
            else
                Console.WriteLine("Crawl of page succeeded {0}", crawledPage.Uri.AbsoluteUri);
    
            if (string.IsNullOrEmpty(crawledPage.Content.Text))
                Console.WriteLine("Page had no content {0}", crawledPage.Uri.AbsoluteUri);
    
            var htmlAgilityPackDocument = crawledPage.HtmlDocument; //Html Agility Pack parser
            var angleSharpHtmlDocument = crawledPage.AngleSharpHtmlDocument; 
    
            //get content
    
            Console.WriteLine(crawledPage.Content);
    
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 2022-01-10
      相关资源
      最近更新 更多