Abot web crawler将网页或图像存储到文件夹中

时间:2015-04-14 07:33:59

标签: web-crawler

我正在使用Google Abot网络抓取工具,并且想知道如何将单独的网页或图像存储到文件夹中。我查看了论坛,其中显示了以下内容。但是我不能多次存储到同一个文件中,这是否意味着我每次都要创建一个不同的文件名,或者是否有一种更简单的方式来存储网页。另外,如果我只想存储图像,我应该使用哪些选项?我检查了其他Abot stackoverflow帖子,发现以下抓取的网页内容为评论。如何使用它们仅存储图像?

//crawledPage.RawContent   //raw html
//crawledPage.HtmlDocument //lazy loaded html agility pack object (HtmlAgilityPack.HtmlDocument)
//crawledPage.CSDocument   //lazy loaded cs query object (CsQuery.Cq)

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))
            File.WriteAllText(SOMEFILEPATH, crawledPage.Content.Text); //or crawledPage.Content.Bytes

}

P.S。我用它来存储网页使用crawledPage.HtmlDocument.Save(@" C:// TESTCRAWL / FILE" + rnd.Next(1,100).ToString()+" .html& #34;,System.Text.Encoding.UTF8); 有没有办法获得图像?

2 个答案:

答案 0 :(得分:2)

ABot不会自动下载图片,它是为了抓取网址而构建的,您需要编写代码来提取图片网址然后遍历所有网址

第1步:使用HtmlAgilityPack从网页源中提取图像SRC

 List<string> imgScrs = new List<string>();
 HtmlDocument doc = new HtmlDocument();
 doc.LoadHtml(crawledPage.Content.Text);
 var nodes = doc.DocumentNode.SelectNodes(@"//img[@src]"); s
 foreach (var img in nodes)
 {
    HtmlAttribute att = img["src"];
    imgScrs.Add(att.Value)
 }

第2步:遍历列表中的每个src并在c:drive中下载图片

int i = 0;
foreach (string src in imgScrs)
{
  client.DownloadFile(new Uri(src), @"c:\temp\image_" + i +".jpg");
  i++;      
}

注意::我正在使用“i”变量为每个图片指定一个唯一的名称,否则每次都会覆盖相同的图像

答案 1 :(得分:2)

现在你可以让Abot(c#)为你下载图像。至少有两种解决方案。

<强>制备

在每个解决方案中,创建并使用自定义CrawlConfiguration实例并将其传递给SiteCrawler构造函数。

在配置对象中包含您的图像类型MIME,例如

config.DownloadableContentTypes = "text/html,application/json,text/plain,image/jpeg,image/pjpeg,*/*"

解决方案1 ​​

  1. 创建自己的LinkSelector继承自HapHyperLinkParser 并将其传递给SiteCrawler contructor。
  2. LinkSelector覆盖GetHrefValues中。从下载的页面中提取图像URL,并将其包含在返回的列表中。
  3. 通过引用crawler_ProcessPageCrawlCompleted
  4. 将图片保存在crawledPage.Content.Bytes处理程序中

    解决方案2

    1. crawler_ProcessPageCrawlCompleted处理程序中提取图片网址,并将其添加到您的抓取工具计划程序中

      e.CrawlContext.Scheduler.Add(new PageToCrawl(new Uri(pictureUrl)));

      您的图片将以与任何其他HTML页面相同的方式下载。

    2. 通过引用crawler_ProcessPageCrawlCompleted将图片保存在crawledPage.Content.Bytes处理程序中。

    3. 在任何一种情况下,您都可以通过以下方式区分这是一个页面还是图像。页面网址。

      <强>优势

      使用抓取工具而非单独的下载器有很多好处。

      如果网站需要登录才能下载任何内容,您可以为抓取工具建立会话,而不必担心打开另一个会话。某些网站也会阻止同一用户进行多次登录。

      此外,您需要注意单独的下载程序,并确保它们不会为每个图像建立新的连接。我建议创建连接池并重新使用它。否则你可以关闭服务器。

      我的偏好仍然只是使用抓取工具。