天天看點

使用 jsoup 爬取資料

1、因為工作安排,臨時讓我這從沒摸過爬蟲的人爬資料,過程吧,還算可以,網上開源的有,加上偉大的群友的幫忙,算是出了一版運作結果正确的爬蟲,現在記錄下,有什麼隐患,歡迎廣大同行批評指正。

2、代碼結構:

使用 jsoup 爬取資料

如上圖,結構很簡單,引用了jsoup jar包,Rule類具體的爬蟲代碼,Air類是要擷取的頁面資料實體類。

3、代碼:

Air.java:

package com.zyy.splider.rule;

public class Air {

    String indexNo ;//序号

    String city;//城市

    String date; //日期

    String aqi; //AQI指數

    String level;//空氣品質級别

    String prev;//首要污染物

    public Air(

            String indexNo,

            String city,

            String date,

            String aqi,

            String level,

            String prev){

        this.indexNo = indexNo;

        this.city = city;

        this.date = date;

        this.aqi = aqi;

        this.level = level;

        this.prev = prev;

    }

    public String getIndexNo() {

        return indexNo;

    }

    public void setIndexNo(String indexNo) {

        this.indexNo = indexNo;

    }

    public String getCity() {

        return city;

    }

    public void setCity(String city) {

        this.city = city;

    }

    public String getDate() {

        return date;

    }

    public void setDate(String date) {

        this.date = date;

    }

    public String getAqi() {

        return aqi;

    }

    public void setAqi(String aqi) {

        this.aqi = aqi;

    }

    public String getLevel() {

        return level;

    }

    public void setLevel(String level) {

        this.level = level;

    }

    public String getPrev() {

        return prev;

    }

    public void setPrev(String prev) {

        this.prev = prev;

    }

}

Rule.java

package com.zyy.splider.rule;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import org.jsoup.nodes.Element;

import org.jsoup.select.Elements;

public class Rule {

    public static void main(String[] args) throws Exception {

        crawler();

    }

    //爬取

    public static void crawler() throws Exception{

        List<Air> cityInfo = new ArrayList<Air>();

        int index = 1;

        int line = 1;

        for(int i = 1;i < 14;i ++){

            System.out.println("==================================================" + i);

            String root_url="http://datacenter.mep.gov.cn/report/air_daily/air_dairy.jsp?page=" + i;

            Document document=Jsoup.connect(root_url).timeout(3000000).get();

            System.out.println("*****************************************");

            Elements links=document.getElementsByClass("report1_5");

            //Elements links = document.select("#report1 .report1_5");

            String indexNo = null ;//序号

            String city = null;//城市

            String date = null; //日期

            String aqi = null; //AQI指數

            String level = null;//空氣品質級别

            String prev;//首要污染物

            for(Element link:links){

                System.out.println( link.text());

                if(index % 6 == 1){//序号

                     //air.setIndexNo(link.text()) ;

                    indexNo = link.text();

                }else if(index % 6 == 2){//城市

                    //air.setCity(link.text());

                    city = link.text();

                }else if(index % 6 == 3){ //日期

                    //air.setDate(link.text());

                    date = link.text();

                }else if(index % 6 == 4){ //AQI指數

                    //air.setAqi(link.text());

                    aqi = link.text();

                }else if(index % 6 == 5){ //空氣品質級别

                    //air.setLevel(link.text());

                    level = link.text();

                }else if(index % 6 == 0){ //首要污染物

                    //air.setPrev(link.text());

                    prev= link.text();

                    //将air資訊儲存到cityInfo清單

                    cityInfo.add(new Air(indexNo, city, date, aqi, level, prev));

                    line ++;//表示一行結束,行号+1

                }

                index ++;

            }

        }

        //列印cityInfo中的資訊

        for(int i = 0;i < cityInfo.size();i ++){

            System.out.println("第" + i + "條資料--------------------------------->");

            System.out.println("序号:" + cityInfo.get(i).getIndexNo());

            System.out.println("城市:" + cityInfo.get(i).getCity());

            System.out.println("日期:" + cityInfo.get(i).getDate());

            System.out.println("AQI指數:" + cityInfo.get(i).getAqi());

            System.out.println("空氣品質級别:" + cityInfo.get(i).getLevel());

            System.out.println("首要污染物:" + cityInfo.get(i).getPrev());

        }

        }

    }

}

4、也不知道這算不算一個爬蟲程式,反正要的資料算是都有了,代碼很簡單,運作測試真心痛苦,因為有分頁,每頁顯示條數還是網站定死的,是以隻能連發13個請求擷取每頁的資料,可能因為那個網站屬于政府的網站,速度慢到死,,這裡簡單記錄下,希望這是第一次也是最後一次爬網站。。。。。。

版權聲明:本文為CSDN部落客「weixin_33912638」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/weixin_33912638/article/details/93714073