第一个Jsoup Demo

emmmmmmmmmmmmm 刚好在工作空闲期 接触了Jsoup 有趣又有时间 上周开始接触 上周五开始着手写第一个Demo 恐怕也不会有第二个
就...看个开心 欢迎交流...

import org.apache.commons.io.FileUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.*;
import java.net.URL;

/**
 * Created by yitiaohu on 2017/9/8.
 */
public class Jsoup{

    static String articleTitle;
    static int num = 0;

    public static void main(String[] args) {
        int i = 1;
        while (true) {
            //页面链接
            String url = "";//这里放网址 可能涉及侵权...一律替换...我是玩了假分页 链接后直接拼接分页(page=i)
            //获取页面
            page(url);
            System.out.println("当前是第"+i+"页");
            i++;
        }


    }

    public static void page(String url) {
        try {
        //得到页面
            Document document = Jsoup.connect(url).get();
            //html:
            Elements elements = document.body().getElement***(/*这里放页面结构 怎么样能最简单的拿到文章链接怎么写 算是考验js功底*/);
            for (Element e : elements) {
                String text = e.getElementsByTag("a").text();
                //我是有条件筛选的 只要特定文章...
                if (text.contains("****")) {
                    getArticle(e);
                    //num是静态变量图片标志位 没玩出来图片怎么扒下来 再放到扒下来的页面里 只好放到同一文件夹下
                    num = 0;
                }
            }
        } catch (Exception e) {
            System.out.println("url连接异常:" + e.getMessage());
            //e.printStackTrace();
        }
    }

    public static void getArticle(Element e) {
        String attr = e.getElementsByTag("a").attr("href");
        try {
            Document document = Jsoup.connect(/*文章链接 按照自己的套路写吧*/).get();
            Element body = document.body();
            articleTitle = body.getElementById("articleTitle").text();
            //文章名称有特殊符号 替换下
            articleTitle = articleTitle.replace("|", "_");
            //本地存储路径
            String fileName = "E://JsoupArticle/" + articleTitle + ".html";
            FileOutputStream fos = new FileOutputStream(new File(fileName));
            OutputStreamWriter osw = new OutputStreamWriter(fos);
//            String html = document.html();
//            osw.write(html);
            //所有html元素
            Elements allElements = document.getAllElements();
            //存图片
            //拿到所有img标签
            Elements pic = document.getElementsByTag("img");
            for (int i = 0; i < pic.size(); i++) {
                getPic(pic.get(i), i + 1);
            }
            osw.write(String.valueOf(allElements));
            osw.close();
            System.out.println("抓取文章完成 当前文章:" + articleTitle);
        } catch (IOException e1) {
            System.err.println("获取文章失败" + e1.getMessage());
        }finally {
        //写啥都行 就是不想无休止的扒下去 随便检验个 退出程序
            if(articleTitle.startsWith("***")){
                System.exit(0);
            }
        }
    }

    private static void getPic(Element e, int i) {
    //emmmmmmmmmm图片路径 怎么拿到图片的src属性 你们开心就好
        String src = e.attr("src");
        //满足这两个条件的都是我不需要的图片 可自行调整
        if (src.startsWith("https:")&&"".equals(src)) {
            return;
        }
        //满足这个条件的 才是我真正需要的图片路径
        if (src.startsWith("/img")) {
            src = /*我的需要拼装域名*/ + src;
            num++;
        }
        //拼个名字 方便区分
        File pic = new File("E://JsoupArticle/" + articleTitle + "_" + num + ".jpg");

        try {
            FileUtils.copyURLToFile(new URL(src), pic);
        } catch (Exception e1) {
            System.out.println("获取图片异常");
            e1.printStackTrace();
        }
    }
}

最终效果...

转载于:https://my.oschina.net/u/3660168/blog/1605530

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值