--------------2018/12/11 update-------------------

爬取的网站已经关闭,此爬虫已经失效,代码也不会再维护,不建议学习此代码等设计风格。写的实在挺烂(摔!

感兴趣的同学浏览下就好。

-----2017-5-22再更新-----------------

现在爬虫好像出问题了。。。。。。。。。好像很多同学都对这个感兴趣,那我就放到GitHub上维护吧:https://github.com/qq1367212627/youmziSpider   感兴趣的可以去这个地址看

---------2016-----------------

花了一天左右的时间,用Java写了一个图片爬取,理论上是可以将所有的图片爬下的,但是整个站点图片太多了,所以只测试的爬了9000张左右的图片。好啦先看效果图。

接下来是代码,这个简单的小爬虫是基于httpclient,所以大家使用代码,还要记得下载依赖库才可以运行(依赖库下载地址:Apache HttpComponents),网页解析使用正则解析的,还是比较简单的小爬虫。

以下,代码(代码风格很混乱,请谅解):
主程序入口:Main

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;public class Main {public static Set<String> set =null;public static void main(String[] args) {DownLoad.CreateDir("D:\\youmzi");                   //图片保存路径set = new HashSet<>();ArrayList<String> Page_Link = new ArrayList<>();ArrayList<PictMsg> Pict_Link =new ArrayList<>();Page_Link.add("http://www.youmzi.com/xg/");Page_Link.add("http://www.youmzi.com/mingxing.html");Page_Link.add("http://www.youmzi.com/meinvgif.html");//                 gif图Page_Link.add("http://www.youmzi.com/meinv.html");Page_Link.add("http://www.youmzi.com/baoru.html");Page_Link.add("http://www.youmzi.com/luguan.html");Page_Link.add("http://www.youmzi.com/tuinvlang.html");Page_Link.add("http://www.youmzi.com/liufeier.html");Page_Link.add("http://so.youmzi.com/");while(Page_Link.size()>0){String url=Page_Link.get(0);Find_Link.Add_Page_Link(url,Page_Link);Find_Link.Add_Pict_Link(url,Pict_Link);DownLoad.downloadPict(Pict_Link);Page_Link.remove(0);}}
}
        import java.util.ArrayList;import java.util.regex.Pattern;import  java.util.regex.Matcher;/*** Created by lewis on 2016/10/20.*/
public class Find_Link {public static boolean Add_Page_Link(String Context, ArrayList<String> Page_link) {String link=null;String fa="<a href=(['\"]?)(?!http)((?!js|css)[^\"' \\r\\n])+\\1>下一页";Pattern r= Pattern.compile(fa);Matcher m = r.matcher(DownLoad.downloadHtml(Context));if (m.find(0)) {link = m.group();String pa = "<a href='(.+?)'>下一页";r = Pattern.compile(pa);m = r.matcher(link);if (m.find(0)) {link = m.group(1);if (!link.equals("#") && link != null&&!Main.set.contains(link)) {Main.set.add(link);Page_link.add("http://www.youmzi.com/" + link);                     //获得捕获组1,一共2个组,被匹配的字符算一个组}}}return m.find(0)&&(!link.equals("#"))&&link!=null;}public static void Add_Pict_Link(String Context,ArrayList<PictMsg> Pict_link) {String pa;Pattern r;Matcher m ;pa="<a href=\"(.+?)\" title=\"(.+?)\" target=\"_blank\">(.+?)<\\/a>";r= Pattern.compile(pa);m = r.matcher(DownLoad.downloadHtml(Context));while(m.find()) {String url=m.group(1);String head=m.group(2);if(!Main.set.contains(url)){Pict_link.add(new PictMsg(url,head));Main.set.add(url);}}}}
/*** Created by lewis on 2016/10/21.*/
public class PictMsg {private String url;private String headline;public PictMsg(String url, String headline) {this.url = url;this.headline = headline;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getHeadline() {return headline;}public void setHeadline(String headline) {this.headline = headline;}@Overridepublic String toString() {return "网址:"+url+"标题:"+headline;}
}
        import org.apache.http.HttpEntity;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import java.io.*;import java.util.ArrayList;import java.util.regex.Matcher;import java.util.regex.Pattern;/*** Created by lewis on 2016/10/20.*/
public class DownLoad {public static CloseableHttpClient httpClient = HttpClients.custom().build();public static String downloadHtml(String url) {CloseableHttpResponse response = null;BufferedReader br=null;HttpGet httpGet = new HttpGet(url);try {response = httpClient.execute(httpGet);HttpEntity entity = response.getEntity();InputStreamReader isr = new InputStreamReader(entity.getContent(),"gb2312");StringBuilder stringBuilder =new StringBuilder();br =new BufferedReader(isr);String line =null;while((line=br.readLine())!=null){stringBuilder.append(line+'\n');}return stringBuilder.toString();} catch (IOException e) {e.printStackTrace();}finally {if(br!=null){try {br.close();} catch (IOException e) {e.printStackTrace();}}}return null;}public static void downloadPict(PictMsg pictMsg,int count) {String url=pictMsg.getUrl();CloseableHttpResponse response;OutputStream out = null;InputStream in=null;BufferedReader br=null;byte buffer[] = new byte[1024];if(url!=null){try {HttpGet httpGet = new HttpGet(url);response = httpClient.execute(httpGet);HttpEntity entity = response.getEntity();in = entity.getContent();CreateDir("D:\\youmzi"+File.separator+pictMsg.getHeadline());String suffix;if(url.charAt(url.length()-1)=='g') {suffix=".jpg";}else{suffix=".gif";}System.out.print("正在下载:"+"D:\\youmzi"+File.separator+pictMsg.getHeadline()+File.separator+count+suffix+":");out = new FileOutputStream(new File("D:\\youmzi"+File.separator+pictMsg.getHeadline()+File.separator+count+suffix));int index=0;while((index=in.read(buffer))!=-1){out.write(buffer,0,index);}out.flush();} catch (IOException e) {e.printStackTrace();}finally {try {if (br!=null){br.close();}if(out!=null){out.close();}if(in!=null){in.close();}} catch (IOException e) {e.printStackTrace();}}}}public static void downloadPict(ArrayList<PictMsg> Pict_link){for(int i = 0;i< Pict_link.size();i++){// Main.print(Pict_link.get(i));if(Pict_link.get(i)!=null)DownLoad_All_PictSoruce(Pict_link.get(i));}Pict_link.clear();}public static void CreateDir(String dir){File file = new File(dir);if(!file.exists()){file.mkdir();}}public static void DownLoad_All_PictSoruce(PictMsg pictMsg){ArrayList<String> All_Pict_Soruce = new ArrayList<>();String  url =pictMsg.getUrl();All_Pict_Soruce.add(url);while(Find_Link.Add_Page_Link(url,All_Pict_Soruce)){     //通过循环一直找到最后一个页面url=All_Pict_Soruce.get(All_Pict_Soruce.size()-1);}for(int i =0;i<All_Pict_Soruce.size();i++){//Main.print(Pict_down_Soruce(All_Pict_Soruce.get(i)));if(All_Pict_Soruce.get(i)!=null){String link=Pict_down_Soruce(All_Pict_Soruce.get(i));if(!Main.set.contains(link)) {downloadPict(new PictMsg(link, pictMsg.getHeadline()), i);System.out.println("一共有:"+All_Pict_Soruce.size()+","+"还剩下:"+(All_Pict_Soruce.size()-i));Main.set.add(link);}}}All_Pict_Soruce.clear();}public static String Pict_down_Soruce(String url){String context = DownLoad.downloadHtml(url);String pa;Pattern r;Matcher m ;pa="<img src='(.+?)' alt=";r= Pattern.compile(pa);m = r.matcher(context);if(m.find(0)){return m.group(1);}return null;}
}

爬虫:实现网站的全部图片抓取相关推荐

  1. Python爬虫之gif图片抓取

    Python爬虫之gif图片抓取 标签:图片爬虫 这几天,对于怎么去爬取图片很感兴趣,就研究了一下,图片爬虫可以说是有简单,更有复杂的,今天,我做了一个比较简单的gif的图片爬虫,仅仅学习一下怎么进行 ...

  2. python爬取新浪微博数据中心_Python爬虫框架Scrapy实战之批量抓取招聘信息

    网络爬虫抓取特定网站网页的html数据,但是一个网站有上千上万条数据,我们不可能知道网站网页的url地址,所以,要有个技巧去抓取网站的所有html页面.Scrapy是纯Python实现的爬虫框架,用户 ...

  3. [Python从零到壹] 四.网络爬虫之入门基础及正则表达式抓取博客案例

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  4. c#使用正则表达式获取TR中的多个TD_[Python从零到壹] 四.网络爬虫之入门基础及正则表达式抓取博客案例...

    首先祝大家中秋节和国庆节快乐,欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都 ...

  5. 爬虫练习(二)—股票信息抓取

    爬虫练习(二)-股票信息抓取 1 思路 1.首先需要找到一个将股票信息存放在html上的股票网站 2.因为每一个股票都是一个独立的页面,所以在抓取时,首先要了解每个股票网址的规律(网址最后结尾都是股票 ...

  6. python爬取二级页面_爬虫代码改进(二)|多页抓取与二级页面

    本文是下面两篇文章的续篇 本系列包括如下内容抓取豆瓣top250一页多个字段 整合成列表 存储为json文件 定义成函数形式 多页抓取之构造url 多页抓取之翻页 抓取二级页面数据 通过生成器优化代码 ...

  7. python爬取app播放的视频,Python爬虫工程师必学——App数据抓取实战视频教程

    爬虫分为几大方向,WEB网页数据抓取.APP数据抓取.软件系统数据抓取.本课程主要为同学讲解如何用python实现App数据抓取,课程从开发环境搭建,App爬虫必备利器详解,项目实战,到最后的多App ...

  8. Python爬虫 | 斗图网表情包抓取

    Python爬虫 | 斗图网表情包抓取 1.数据来源分析 2.制作div_list 3.发起请求 4.保存图片 5.批量获取 6.完整代码 声明 1.数据来源分析   打开斗图吧的主页,发现网址非常有 ...

  9. 高效抓图,轻松搜!图片抓取工具使用技巧

    图片抓取工具是一种可以帮助用户方便快捷地从网络上获取所需图片的软件.它可以自动化地从网页或其他来源中提取图片,并将它们保存到本地或云端存储空间中.在今天这个以图像为主导的时代,图片抓取工具已经成为了自 ...

最新文章

  1. 4.7 mini趴 走进猎豹
  2. [Medical Image Process] 3.4 Morphology Application—Watershed Algorithm 分水岭算法
  3. rsync 常用命令及格式
  4. 2021年,腾讯研发人员增长41%,Go首次超越C++成为最热门语言
  5. RTSP服务器之————rtsp-server(轻量级RTSP / RTP流媒体服务器)
  6. vim查找关键字_VIM学习笔记 对话框(Dialog)
  7. 弹出数组第一个元素 php,弹出第一个元素数组以在php codeigniter中插入批处理
  8. SAP License:如何预防企业“癌症”
  9. 下个目标是攻克FIFA游戏?DeepMind让AI自学传球配合
  10. SaaSpace:25款最佳免费视频编辑软件工具
  11. 制作效果远超CHM的帮助文档制作软件,速看!
  12. 百度地图WEB服务-全景静态图使用心得
  13. python,计算并发现闰月的规律
  14. mysql 1436_MySQL错误1436:线程堆栈溢出,用简单的查询
  15. QuickChm出现的“不支持此接口”错误解决
  16. R语言实战(统计分析1)
  17. 【渝粤题库】广东开放大学 基础会计 形成性考核
  18. 2016校招面试题汇总
  19. nest.js实战之集成sentry
  20. 零基础语法入门第十二/十三讲指示代词和不定代词以及形容词

热门文章

  1. 论文笔记 Deep Gaussian Processes for Calibration of Computer Models 用于校准计算机模型的深度高斯过程
  2. 视频+全文|朱嘉明:大数据时代的危机与挑战 - 在DAO原则下构建分布式存储、分布式计算与分布式能源的未来...
  3. 一 什么是mysql cursor_mysql中的cursor是什么意思?
  4. php连接access2010,怎么安装access2010?
  5. Outlook邮箱添加163邮箱
  6. 基于javaweb+jsp的设备维修管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap)
  7. 2023“认证杯”数学中国数学建模赛题浅析
  8. T3服务器IP地址去哪里修改,用友t3服务器ip地址修改
  9. oracle ebs 的预克隆
  10. 《Struts Web设计与开发大全》 第12章 多模块开发与Struts扩展[转]