一个简单Java爬虫demo(Java爬虫爬取数据和图片数据)

在这里我们用jsoup来做,首先导入jsoup依赖
直接引入下面的依赖,如果有喜欢追新版本的强迫症者可以到官网搜索最新版本https://mvnrepository.com/

		<!-- jsoup -->
		<dependency>
			<groupId>org.jsoup</groupId>
			<artifactId>jsoup</artifactId>
			<version>1.12.1</version>
		</dependency>

接下来就是开始小demo的制作,首先创建一个类,这个随意,在这里演示的是爬取大乐透的开奖信息,一个简单Java爬虫demo(Java爬虫爬取数据和图片数据)_第1张图片
这里我们通过类选择器来获取元素,废话不多说,直接上代码。

import com.demo.entity.dto.LotteryInfo;
import org.apache.commons.lang3.StringUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

public class Lottery {

	//定义访问的链接
    public static String URL = "http://kaijiang.500.com/shtml/dlt/";
    public static String url_html = ".shtml";

    public Document getHtmlTextByUrl(){

        String url = URL + getQS() + url_html;

        Document document = null;
        try {
        	//通过Jsoup访问链接获得页面
            document = Jsoup.connect(url)
                    .data("query","java")
                    .userAgent("Mozilla")
                    .cookie("auth", "token")
                    .timeout(300000).post();
        } catch (IOException io) {
            try{
                document = Jsoup.connect(url).timeout(5000000).get();
            }catch(Exception e){
				e.printStackTrace();
            }
        }
        return document;
    }

	/**
	*通过类选择器来获取元素信息
	*/
    public Elements getElementByClass(Document document, String className){
        Elements elements = document.select(className);
        return elements;
    }

	/**
	* 这个方法
	*/
    public static String getQS(){
        Date date = new Date();
        SimpleDateFormat yyyy = new SimpleDateFormat("YYYY");
        String format = yyyy.format(date);
        String substring = format.substring(2);
        try {
            Date parse = yyyy.parse(format);
            long x = date.getTime() - parse.getTime();
            int y = (int)(x/1000/60/60/24/7) * 3 -5;
            substring += y;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return substring;
    }

	/**
	* 测试
	*/
    public static void main(String[] args) {
        Lottery lottery = new Lottery();
        LotteryInfo info = lottery.getInfo();
        System.out.println(info);
    }

    public LotteryInfo getInfo(){
    	//调用访问页面获得页面元信息
        Document document = getHtmlTextByUrl();
        StringBuilder red_builder = new StringBuilder();
        StringBuilder blue_builder = new StringBuilder();
        String date = "";
        if(document != null){
        	//通过类选择获得对应元素
            Elements red_elements = getElementByClass(document, ".ball_red");
            Elements blue_elements = getElementByClass(document, ".ball_blue");
            Elements time = getElementByClass(document, ".span_right");
            //这里就将获得元素进行赋值组装
            for(Element e : time){
                date = e.html();
            }
            for(Element e : red_elements){
                if(e != null){
                    red_builder.append(e.html());
                }
            }

            for(Element e : blue_elements){
                if(e != null){
                    blue_builder.append(e.html());
                }
            }

        }
        String red = red_builder.toString();
        String blue = blue_builder.toString();
        if(StringUtils.isBlank(red) || StringUtils.isBlank(blue)){
            return null;
        }
        LotteryInfo lotteryInfo = new LotteryInfo();
        lotteryInfo.setId(UUID.randomUUID().toString());
        lotteryInfo.setRed(red);
        lotteryInfo.setBlue(blue);
        lotteryInfo.setDate(date);
        lotteryInfo.setPeriods(getQS());
        lotteryInfo.setWeek(1L);
        return lotteryInfo;
    }

以上只是一个非常简单的demo,下面也简单介绍下jsoup的一些常用方法,以下是伪代码

		//这一个就不解释了
		Document doc = Jsoup.connect(url).get();
		//获得网页的所有对应的href链接和src链接
        Elements links = doc.select("a[href]");
        Elements media = doc.select("[src]");
        Elements imports = doc.select("link[href]");

		//获得所有你想要的值
		for(Element e : media){
			//获得图片中的相关属性
			if("img".equals(e.tagName()){
				String tageName = e.tagName(), 
				String linkName = e.attr("abs:src"), 
				String width= e.attr("width"), 
				String height= e.attr("height"),
			}
		}
		//links和imports方法相似
		for(Element e : imports ){
			e.tagName(),
			e.attr("abs:href"), 
			e.attr("rel"));
		}

你可能感兴趣的:(java)