前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java|分页爬取表情包图片

Java|分页爬取表情包图片

作者头像
算法与编程之美
发布2020-04-20 13:09:41
9770
发布2020-04-20 13:09:41
举报

1 前提简介

前面讲过了如何对文章小说的分目录,分章节爬取保存,下面将讲述对当前热门的表情包进行分页,分类爬取。

2 简单查看

下面是一个表情包网站的首页,并且分了很多类别。

图2.1 表情包首页

而且有很多页数。

图2.2 不同页

经过观察,每一页的url只有最后代表页数的数字变了,那就可以从这里下手,多页爬取。

图2.3 区别

3 代码及注释

下面就来看看详细的代码和注释吧,还是温馨提醒注意xpth以及url书写正确哦。

//引入的包,略public class GetPicture1 implements PageProcessor { //定义一个变量用来表示需要下载的总页数 private static int size = 3; //定义一个变量用来表示起始页 private static int number = 1; //声明一个用来存储需要下载的url路径的集合 private static List<String> listUrl = new ArrayList<String>(); //对所要爬取的页面进行相关设置 private Site site = Site.me() .setCharset("utf-8") .setSleepTime(1000)//休眠时间 .setTimeOut(1000);//超时时间 @Override public Site getSite() { return site; } //爬取数据的逻辑 @Override public void process(Page page) { //获取url Selectable url = page.getUrl(); //url匹配 if(url.regex("https://www.doutula.com/article/list/\\?page=\\d*").match()){//列表页 //获取页面 Html html = page.getHtml(); //解析页面获取相关信息(获取所有的标题url) List<String> urls = html.xpath("[@class='container_']/div[1]/div[1]/div[2]/a").links().all(); if(number > size + 1){ return; } urls.add(listUrl.get(number - 1)); //下一页 number++; //将连接放入待爬取序列 page.addTargetRequests(urls); }else{ //爬取图片 获取页面 Html html = page.getHtml(); //获取表情包组的名称 String title = html.xpath("[@class='container_']/div[1]/div[1]/div[2]/li/div[1]/h1/a/text()").toString(); //获取表情包图片的链接// List<String> pictureUrl = html.xpath("[@class='container_']/div[1]/div[1]/div[2]/li/div[2]/div/table/tbody/tr/td[1]/a/img/@src").all(); //下载到本地 downPicture(pictureUrl,title); } } //将图片下载到本地 private void downPicture(List<String> pictureUrl, String title) { for(int i=0;i<pictureUrl.size();i++){ //获取每一张图片连接 String link = pictureUrl.get(i); //做一个非空判断 if(link == null || link == ""){ return;//结束 } try { //将连接字符串封装成一个URL对象 URL url = new URL(link); //获取网络连接 HttpURLConnection conn = (HttpURLConnection)url.openConnection(); //获取一个输入流 InputStream in = conn.getInputStream(); //指定图片目录存储的位置 File file = new File("D:\\doutula\\" + title); //判断目录是否存在 if(! file.exists()){ //创建多级目录 file.mkdirs(); } //自定图片的位置 File file2 = new File("D:\\doutula\\" + title + "\\" + i + ".jpg"); //输出流 FileOutputStream fos = new FileOutputStream(file2); ByteArrayOutputStream outStream = new ByteArrayOutputStream(); //定义一个缓冲区 byte[] buf = new byte[1024]; //定义一个标记用于判断有没有读完 int len = 0; //循环读取 while((len = in.read(buf)) != -1){ outStream.write(buf,0,len); } System.out.println("下载完毕"); //写出到本地 fos.write(outStream.toByteArray()); //关闭资源 in.close(); outStream.close(); fos.close(); } catch (Exception e) { e.printStackTrace(); } } } //生成所有下载页的url列表,通过size控制的页数 public static List<String> listUrl(int num){ List<String> list = new ArrayList<String>(); //循环往列表中添加url for(int i=1;i<=num;i++){ list.add("https://www.doutula.com/article/list/?page=" + (i+1)); } return list; } //主程序的入口、线程 public static void main(String[] args) { //获取所有需要下载页的url listUrl = listUrl(size); Spider.create(new GetPicture1()).thread(1).addUrl("https://www.doutula.com/article/list/?page=1").run(); }}

这样,就能拿到大量的热门表情包了,只要敢去“new”,“Java”都能感想敢做。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档