发现我的不足:
1、对awt和swing的使用十分的差劲,时不时就要查一下博客。。。

可以做一个专门爬取网页图片的软件,功能已经实现了,就UI对应的设计一下就好了。
做完了。。虽然有很大的局限,但是功能和界面是有的

Main.java

package crawling.app;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Main
{//写一个界面JFrame frame = new JFrame("图片爬取器");JLabel pathlabel = new JLabel("当前保存路径:.");JLabel show = new JLabel();public static void main(String[] args) throws Exception{//先把功能写出来。然后在写GUI,这样清晰的多,也容易做//以豆瓣的电影排行榜为例//我打算先把对应网页直接整个爬下来。存入文本//然后在在本地进行正则分析,存入excel和JDBC/*//创建一个Crawling对象Crawling craw = new Crawling("https://movie.douban.com/chart");craw.getContent("E:\\java\\practice\\seven\\Java爬虫练习\\豆瓣电影排行榜网页源代码.txt");//我需要电影封面的url、电影名称、上映年份、演员表、评分、评价人数craw.analysis();//爬取图片url*/Main main = new Main();main.init();}public void init(){frame.setSize(800,600);JPanel panel = new JPanel();//用来放网址提示和输入框JLabel label = new JLabel("网址:");panel.add(label);JTextField web = new JTextField(40);panel.add(web);frame.add(panel, BorderLayout.NORTH);JPanel panel2 = new JPanel();JButton crawBn = new JButton("开始爬取");JButton selectPathBn = new JButton("选择位置");panel2.add(selectPathBn);panel2.add(crawBn);frame.add(panel2,BorderLayout.SOUTH);JPanel  panel3 = new JPanel(new BorderLayout());panel3.add(pathlabel,BorderLayout.NORTH);panel3.add(show,BorderLayout.CENTER);frame.add(panel3,BorderLayout.CENTER);JFileChooser chooser = new JFileChooser(".");chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);Action selectFile = new AbstractAction(){public void actionPerformed(ActionEvent e){int result = chooser.showOpenDialog(new JFileChooser("."));if(result == JFileChooser.APPROVE_OPTION){String name = chooser.getSelectedFile().getPath();pathlabel.setText("当前路径:"+name);}}};selectPathBn.addActionListener(selectFile);Action crawling = new AbstractAction(){public String url;public void actionPerformed(ActionEvent e){new Thread(() -> {url =  web.getText();//用户输入的网址CrawPictures craw = new CrawPictures(url,show);craw.analysis(pathlabel.getText().split(":")[1]+"\\");}).start();}};crawBn.addActionListener(crawling);frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}}

CrawPictures.java

package crawling.app;
import java.net.*;
import java.util.*;
import java.io.*;
import java.util.regex.*;
import org.apache.poi.hssf.usermodel.*;
import javax.swing.*;
public class CrawPictures
{/*** 网站的网址*/private String web;/*** URL*/private URL url;/*** URL与网站连接*/private URLConnection conn;/*** 网页源代码*/private String sourcecode;/*** 传递过来一个对象*/private JLabel show;/*** Crawling的构造器* @param web 网站的网址*/public CrawPictures(String web, JLabel show){this.web = web;this.show = show;try{url = new URL(web);conn = url.openConnection();//设置请求头,伪装成浏览器conn.setRequestProperty("user-agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64)"+" AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36");conn.connect();}catch(Exception e){e.printStackTrace();}//System.out.println("这里是Crawling的构造器");}    //实例初始化块 ,实例初始化块比构造器更早执行。。。{//System.out.println("这里是Crawling的实例初始化块");}/*** 获取网页源代码,直接下载到本地的指定路径里面* @param path 本地路径,保存网页源代码* @return 同时将网页源代码以文本形式返回*/private String getContent(String path){//打算采用字符流String msg = "";try(BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8"));PrintStream ps = new PrintStream(new File(path))){String line = null;int count = 0;while((line = br.readLine())!=null){msg+=line;ps.println(line);count++;/*try{Thread.sleep(1000);}catch(Exception e){e.printStackTrace();}*/System.out.println("已下载:"+count+"行");show.setText("已下载:"+count+"行");}System.out.println("爬取网页源代码完成!");show.setText("爬取网页源代码完成!");}catch(IOException ioe){ioe.printStackTrace();}sourcecode = msg;return msg;}/*** 通过用户输入的一段内容进行分析,然后生成对应的正则表达式<br>* 1、 用户输入的用例那里替换成(.*?) 先试一下* 2、所有\s匹配的地方,替换成\\s** 3、*//*** 分析网页源代码的方法,取出我所需要的字段,将他们放在ArrayList中*/public void analysis(String path){//先把网页源代码爬下来getContent(path+"网页源代码.txt");//存储爬取图片链接用的ArrayList<String>ArrayList<String> pictures = new ArrayList<>();//电影的封面urlString pic_regex = "<img src=\"(https:.*?\\.jpg)\".*?/>";getDataById(pic_regex,pictures);//提取出图片的url//下载电影封面getPicture(pictures,path);}/*** 这是一个用正则表达式提取数据的方法,方便复用,只需要传入正则表达式的模式,和存储用的ArrayList<String>* @param regex 匹配用的正则表达式* @param list 存储数据用的ArrayList<String>*/private void getDataById(String regex,ArrayList<String> list){Pattern p = Pattern.compile(regex);Matcher m = p.matcher(sourcecode);int i = 0;//第一种方式,一个字段一个字段来while(m.find()){int groupCount = m.groupCount();String elements = "";for( int j = 0; j < groupCount;j++){String element = m.group(j+1);//获取匹配对象if(j==groupCount-1){elements+= element;}else{elements += element+":";}}list.add(elements);//存入ArrayList<String>中i++;System.out.println("正在爬取第"+i+"个,请稍等..."+elements);show.setText("正在爬取第"+i+"个,请稍等..."+elements);}System.out.println("所有元素爬取完成,共"+i+"个");show.setText("所有元素爬取完成,共"+i+"个");//另一种方式pattern中是一大串,用group(1),group(2)这样来爬取。}/*** 根据封面url爬取图片* @param pictures 存储图片url的ArrayList<String>*/private void getPicture(ArrayList<String> pictures,String savepath){int i;for(i = 0 ; i < pictures.size(); i++){try{String path = pictures.get(i);String name = path.split("/")[path.split("/").length-1];System.out.println("正在下载第"+(i+1)+"张图片,请稍等..."+name);show.setText("正在下载第"+(i+1)+"张图片,请稍等..."+name);URL url = new URL(path);URLConnection conn = url.openConnection();conn.setRequestProperty("user-agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64)"+" AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36");conn.connect();//字节流InputStream input = conn.getInputStream();byte[] buffer = new byte[1024];int hasRead = -1;RandomAccessFile raf = new RandomAccessFile(savepath+name,"rw");while((hasRead = input.read(buffer)) != -1){raf.write(buffer,0,hasRead);}input.close();raf.close();}catch(Exception e){e.printStackTrace();}}System.out.println("图片下载完成,共"+i+"张");show.setText("图片下载完成,共"+i+"张");}}

java实现专门爬取网页图片的软件相关推荐

  1. java爬虫-简单爬取网页图片

    刚刚接触到"爬虫"这个词的时候是在大一,那时候什么都不明白,但知道了百度.谷歌他们的搜索引擎就是个爬虫. 现在大二.再次燃起对爬虫的热爱,查阅资料,知道常用java.python语 ...

  2. 【用Java爬取网页图片——爬虫爬取数据】

    用Java爬取网页图片--爬虫爬取数据 1.在创建项目中导入jsoup 2.创建一个保存下载图片的路径 3.使用URL读取网页路径,jsoup读取网页内容 4.利用属性标签获取图片连接块 5.因为该路 ...

  3. Java 爬取网页图片并下载

    Java 爬取网页图片并下载 源码; package a; import org.jsoup.Connection; import org.jsoup.Jsoup; import org.jsoup. ...

  4. Python学习笔记:爬取网页图片

    Python学习笔记:爬取网页图片 上次我们利用requests与BeautifulSoup爬取了豆瓣<下町火箭>短评,这次我们来学习爬取网页图片. 比如想爬取下面这张网页的所有图片.网址 ...

  5. node:爬虫爬取网页图片 1

    代码地址如下: http://www.demodashi.com/demo/13845.html 前言 周末自己在家闲着没事,刷着微信,玩着手机,发现自己的微信头像该换了,就去网上找了一下头像,看着图 ...

  6. 一个咸鱼的python_一个咸鱼的Python爬虫之路(三):爬取网页图片

    学完Requests库与Beautifulsoup库我们今天来实战一波,爬取网页图片.依照现在所学只能爬取图片在html页面的而不能爬取由JavaScript生成的图. 所以我找了这个网站 http: ...

  7. 使用Python爬取网页图片

    使用Python爬取网页图片 李晓文 21 天前 近一段时间在学习如何使用Python进行网络爬虫,越来越觉得Python在处理爬虫问题是非常便捷的,那么接下来我就陆陆续续的将自己学习的爬虫知识分享给 ...

  8. 利用python爬取网页图片

    学习python爬取网页图片的时候,可以通过这个工具去批量下载你想要的图片 开始正题: 我从尤物网去爬取我喜欢的女神的写真照,我们这里主要用到的就两个模块 re和urllib模块,有的时候可能会用到t ...

  9. node.js 爬虫 实现爬取网页图片并保存到本地

    node.js 爬虫 实现爬取网页图片并保存到本地 没有废话直接看代码 /*** 请求网站数据* 将数据保存本地文件*/ //不同协议引用不同模块,http https const http = re ...

最新文章

  1. php t double arrow,关于php:php – 语法错误,意外T_DOUBLE_ARROW
  2. 皮一皮:20岁和30岁的你的区别...
  3. ip rule,ip route,iptables 三者之间的关系
  4. 吴恩达机器学习Ex2
  5. 秒杀多线程第十五篇 关键段,事件,互斥量,信号量的“遗弃”问题
  6. pb 怎么判断是 小数_考试90分以上的孩子是怎么学数学的?听听老师怎么说?
  7. Linux下more命令C语言实现实践 (Unix-Linux编程实践教程)
  8. 【maven详解-插件】maven插件学习之maven-source-plugin
  9. ckEditor与ckFinder的集成
  10. 服务器(Windows系统)自建蚂蚁(leanote)笔记超详细步骤(包含数据备份和数据还原)
  11. Vue 电商管理系统
  12. 华为智能手环智能手表软件测试,Huawei WatchFace Designer(华为手表表盘开发工具) V10.0.1.16 官方测试版...
  13. 附件文件超过了服务器的大小,Exchange 2010修改附件大小限制
  14. Altium Designer 21 实例贴片0603封装的创建
  15. 怎么才能获取企业工商数据和企业联系方式?
  16. 一本纯属个人的兴趣的书籍即将在未来面世
  17. CoreJava(第二章)Java基础
  18. QuaggaJS在给定图像中定位条形码的工作原理
  19. 饿了吗 ui 行拖拽处理
  20. 在线 ocr 文字识别 和 图片色值选取

热门文章

  1. 程序员求职跳槽攻略,太全了
  2. 冥想---送给爱睡觉和不爱睡觉的小孩
  3. 5G在中国一步步满血,高通实现毫米波独立组网:7.1Gbps网速、3.6毫秒延迟
  4. 转载:Nginx是什么(1.1)《深入理解Nginx》(陶辉)
  5. sqlserver 人名_sqlserver查询各系各科成绩最高分的学生的学号,姓名,系名,课程名称,成绩?...
  6. 数字电路62(加法计数器)
  7. 【几何】2006全国联赛 填空第7题 题解(三角形相似,辅助线)
  8. UE4_4.26虚拟纹理(RVT)与Megascan景观融合
  9. OPC UA性能评估
  10. Android studio 生成logo