java爬取图片案例,彼岸图网

package com.obcy.service;

import com.obcy.util.DownLoad;
import com.obcy.util.GetHTML;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import org.junit.Test;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class BiAn {

    //获取到所有的一级页面,从第2页到第946页


    public ArrayList<String> getTopUrl(){
        //String topurl = "http://www.netbian.com/hd3840x2160/index_2.htm"

        //定义一个集合保存所有的一级页面
        ArrayList<String> list = new ArrayList<String>();
        for (int i = 2; i <= 946; i++) {
            list.add("http://www.netbian.com/hd3840x2160/index_"+i+".htm");
        }

        return list;
    }


    //获取一级页面的所有图片查看地址
    //传入的参数是一级页面地址
    public HashMap<String,String> getGpjView(String topUrl){

        String url = topUrl;
        String html = GetHTML.getHTML(url);
        //获取到网页源代码document对象
        Document document = Jsoup.parse(html);
        //解析document对象,拿到页面每个图片查看地址
        Elements list = document.getElementsByClass("list");
        //拿到的list只有一个对象,这个对象里包含页面所有的图片a标签
        Elements a = null;
        try {
            a = list.get(0).select("ul>li>a");
        } catch (Exception e) {
            System.out.println("没有获取到a标签");

        }
        //遍历a标签对象,拿到a标签的href属性值并拼接成完整的图片查看地址放入集合里
            //建立一个map集合
        HashMap<String,String> map = new HashMap<String, String>();
        for (int i = 0; i < a.size(); i++) {
            String href = "http://www.netbian.com"+a.get(i).attr("href");
            String name = a.get(i).attr("title");
            //System.out.println(href);http://www.netbian.com/desk/22138.htm
            map.put(name,href);
        }

        //搜集本页面的图片查看地址完成

        return map;

    }


    //访问每个一级页面,获取到页面里所有的图片下载地址,
    // 方法接收一个装有一个一级页面所有图片查看地址的集合

    public void getDownload(HashMap<String,String> map){


        //遍历集合,对集合里所有的页面进行提取,每个页面提取到一张图片下载地址,并下载

        for (Map.Entry<String, String> entry : map.entrySet()) {


            String html = GetHTML.getHTML(entry.getValue());

            Document document = Jsoup.parse(html);

            //拿到图片img标签对象,只有一个

            Elements endpage = null;
            try {
                endpage = document.getElementsByClass("endpage").get(0).select("div>p>a>img");
            } catch (Exception e) {
                System.out.println("没获取到页面对象,继续下一个");
                continue;
            }

            //System.out.println(endpage.get(0).attr("src"));

            //得到下载地址
            String target = endpage.get(0).attr("src");


            String path = "F:/BiAn/"+entry.getKey()+".jpg";
            //开始下载
            DownLoad.downLoad(target,path);
        }


    }

    @Test
    public void test(){
        //判断是否存在文件夹F:/BiAn
        File file = new File("F:/BiAn");
        if (!file.exists()){
            file.mkdirs();
            System.out.println("已创建下载文件夹F:/BiAn");
        }else {
            System.out.println("已存在文件夹,具备下载条件");
        }


        //单线程
        //拿到所有一级页面
        ArrayList<String> topUrl = getTopUrl();
        //对每个页面进行操作,1.得到视图集合,2.遍历集合,拿到下载地址,3.下载

        for (String url : topUrl) {
            HashMap<String, String> gpjView = getGpjView(url);
            getDownload(gpjView);
        }



    }





}

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值