java实现专门爬取网页图片的软件
发现我的不足:
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实现专门爬取网页图片的软件相关推荐
- java爬虫-简单爬取网页图片
刚刚接触到"爬虫"这个词的时候是在大一,那时候什么都不明白,但知道了百度.谷歌他们的搜索引擎就是个爬虫. 现在大二.再次燃起对爬虫的热爱,查阅资料,知道常用java.python语 ...
- 【用Java爬取网页图片——爬虫爬取数据】
用Java爬取网页图片--爬虫爬取数据 1.在创建项目中导入jsoup 2.创建一个保存下载图片的路径 3.使用URL读取网页路径,jsoup读取网页内容 4.利用属性标签获取图片连接块 5.因为该路 ...
- Java 爬取网页图片并下载
Java 爬取网页图片并下载 源码; package a; import org.jsoup.Connection; import org.jsoup.Jsoup; import org.jsoup. ...
- Python学习笔记:爬取网页图片
Python学习笔记:爬取网页图片 上次我们利用requests与BeautifulSoup爬取了豆瓣<下町火箭>短评,这次我们来学习爬取网页图片. 比如想爬取下面这张网页的所有图片.网址 ...
- node:爬虫爬取网页图片 1
代码地址如下: http://www.demodashi.com/demo/13845.html 前言 周末自己在家闲着没事,刷着微信,玩着手机,发现自己的微信头像该换了,就去网上找了一下头像,看着图 ...
- 一个咸鱼的python_一个咸鱼的Python爬虫之路(三):爬取网页图片
学完Requests库与Beautifulsoup库我们今天来实战一波,爬取网页图片.依照现在所学只能爬取图片在html页面的而不能爬取由JavaScript生成的图. 所以我找了这个网站 http: ...
- 使用Python爬取网页图片
使用Python爬取网页图片 李晓文 21 天前 近一段时间在学习如何使用Python进行网络爬虫,越来越觉得Python在处理爬虫问题是非常便捷的,那么接下来我就陆陆续续的将自己学习的爬虫知识分享给 ...
- 利用python爬取网页图片
学习python爬取网页图片的时候,可以通过这个工具去批量下载你想要的图片 开始正题: 我从尤物网去爬取我喜欢的女神的写真照,我们这里主要用到的就两个模块 re和urllib模块,有的时候可能会用到t ...
- node.js 爬虫 实现爬取网页图片并保存到本地
node.js 爬虫 实现爬取网页图片并保存到本地 没有废话直接看代码 /*** 请求网站数据* 将数据保存本地文件*/ //不同协议引用不同模块,http https const http = re ...
最新文章
- php t double arrow,关于php:php – 语法错误,意外T_DOUBLE_ARROW
- 皮一皮:20岁和30岁的你的区别...
- ip rule,ip route,iptables 三者之间的关系
- 吴恩达机器学习Ex2
- 秒杀多线程第十五篇 关键段,事件,互斥量,信号量的“遗弃”问题
- pb 怎么判断是 小数_考试90分以上的孩子是怎么学数学的?听听老师怎么说?
- Linux下more命令C语言实现实践 (Unix-Linux编程实践教程)
- 【maven详解-插件】maven插件学习之maven-source-plugin
- ckEditor与ckFinder的集成
- 服务器(Windows系统)自建蚂蚁(leanote)笔记超详细步骤(包含数据备份和数据还原)
- Vue 电商管理系统
- 华为智能手环智能手表软件测试,Huawei WatchFace Designer(华为手表表盘开发工具) V10.0.1.16 官方测试版...
- 附件文件超过了服务器的大小,Exchange 2010修改附件大小限制
- Altium Designer 21 实例贴片0603封装的创建
- 怎么才能获取企业工商数据和企业联系方式?
- 一本纯属个人的兴趣的书籍即将在未来面世
- CoreJava(第二章)Java基础
- QuaggaJS在给定图像中定位条形码的工作原理
- 饿了吗 ui 行拖拽处理
- 在线 ocr 文字识别 和 图片色值选取
热门文章
- 程序员求职跳槽攻略,太全了
- 冥想---送给爱睡觉和不爱睡觉的小孩
- 5G在中国一步步满血,高通实现毫米波独立组网:7.1Gbps网速、3.6毫秒延迟
- 转载:Nginx是什么(1.1)《深入理解Nginx》(陶辉)
- sqlserver 人名_sqlserver查询各系各科成绩最高分的学生的学号,姓名,系名,课程名称,成绩?...
- 数字电路62(加法计数器)
- 【几何】2006全国联赛 填空第7题 题解(三角形相似,辅助线)
- UE4_4.26虚拟纹理(RVT)与Megascan景观融合
- OPC UA性能评估
- Android studio 生成logo