首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >网页爬虫将网页或图像存储到文件夹中。

网页爬虫将网页或图像存储到文件夹中。
EN

Stack Overflow用户
提问于 2015-04-14 07:33:58
回答 2查看 2K关注 0票数 1

我正在使用谷歌Abot网络爬虫,并想知道如何存储单独的网页或只是图像到一个文件夹。我查看了论坛,其中显示了以下内容。但是我不能多次存储在同一个文件中,这是否意味着每次我必须创建一个不同的文件名,还是有一种更简单的方式来存储网页。另外,如果我只想存储图像,我应该使用什么选项?我检查了其他的Abot堆栈溢出帖子,并发现下面的爬行页面内容为注释。如何使用它们只存储图像?

代码语言:javascript
复制
//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

}

我用crawledPage.HtmlDocument.Save(@"C://TESTCRAWL/FILE"+rnd.Next(1,100).ToString()+".html",System.Text.Encoding.UTF8来存储网页,有办法只获取图像吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-06 04:59:38

ABot不会自动下载图像,它是为爬行web urls而构建的,您需要编写代码来提取图像urls,然后遍历所有urls

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

代码语言:javascript
复制
 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:驱动器中下载映像

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

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

票数 3
EN

Stack Overflow用户

发布于 2017-01-26 20:20:11

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

制备

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

在配置对象中包括图像类型MIME。

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

解决方案1

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

解决方案2

  1. 提取crawler_ProcessPageCrawlCompleted处理程序中的图像URL,并将它们添加到爬虫调度程序中,如下所示 e.CrawlContext.Scheduler.Add(new PageToCrawl(new Uri(pictureUrl))); 您的图像将以与其他HTML页面相同的方式下载。
  2. 通过引用crawler_ProcessPageCrawlCompleted,在crawledPage.Content.Bytes处理程序中保存图像。

在任何一种情况下,您都可以通过例如页面URL来区分这是一个页面还是图像。

福利

使用你的爬行器而不是单独的下载器有很大的好处。

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

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

我更喜欢只使用爬行器。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29621616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档