使用 jsoup 爬取數據

一、由於工做安排,臨時讓我這從沒摸過爬蟲的人爬數據,過程吧,還算能夠,網上開源的有,加上偉大的羣友的幫忙,算是出了一版運行結果正確的爬蟲,如今記錄下,有什麼隱患,歡迎廣大同行批評指正。java

二、代碼結構:node

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

三、代碼:ide

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;
    }
    
}
 this

 

Rule.javaurl

package com.zyy.splider.rule;ci

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;get

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

/*
 * 規則類
 * 用於指定url,method,params等
 */
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());
        }
            
        }
    }
    
    
}
 

四、也不知道這算不算一個爬蟲程序,反正要的數據算是都有了,代碼很簡單,運行測試真心痛苦,由於有分頁,每頁顯示條數仍是網站定死的,因此只能連發13個請求獲取每頁的數據,可能由於那個網站屬於政府的網站,速度慢到死,,這裏簡單記錄下,但願這是第一次也是最後一次爬網站。。。。。。

相關文章
相關標籤/搜索