Java爬虫项目实战(一)

主网站链接:

           http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2015/index.html

主要jar包:              

          http://jsoup.org/packages/jsoup-1.8.1.jar

 之前一节我们说过java爬虫从网络上利用jsoup获取网页文本,也就是说我们可以有三种方法获取html,一是根据url链接,二是从本地路径获取,三是通过字符串解析成html文档

在这里,我们利用前两种搭配使用:

  先看本地是否存在需要的网页,如果不存在就通过url获取并保存在本地(下次就可以不需要重新从网络加载)

访问链接看到我们的网站是这样的:

利用谷歌浏览右键检查元素,我们注意观察黄色标记的部分:

     

我们新建一个类,具体内容如下:

 1 //根据url获取数据
 2     public Document getHtmlTextByUrl(String url){
 3         Document document=null;
 4         try{
 5             int i=(int)(Math.random()*1000);////做一个随机延时,防止网站屏蔽
 6             while (i!=0) {
 7                 i--;
 8             }
 9             document=Jsoup.connect(url)
10                         .data("query","Java")
11                         .userAgent("Mozilla")
12                         .cookie("auth", "token")
13                         .timeout(300000).post();
14         }catch(Exception e){
15             e.printStackTrace();
16             try{
17                 document=Jsoup.connect(url).timeout(5000000).get();
18             }catch(Exception e1){
19                 e1.printStackTrace();
20             }
21         }
22         return document;
23     }
24     
25     //根据元素属性获取某个元素内的elements列表
26     public Elements getElementByClass(Document document,String className){
27         Elements elements=null;
28         elements=document.select(className);
29         return elements;
30     }
31     
32     public ArrayList getProvice(String url,String type){
33         ArrayList result=new ArrayList();
34         String classtype="."+type;
35         //从网络上获取网页
36         Document document=getHtmlTextByUrl(url);
37         if (document!=null) {
38             Elements elements=getElementByClass(document,classtype);// tr的集合
39             for(Element e:elements){// 依次循环每个元素,也就是一个tr
40                 if(e!=null){
41                     for(Element ec:e.children()){// 一个tr的子元素td,td内包含a标签
42                         String[] prv = new String[4];
43                         if(ec.children().first()!=null){
44                             prv[0]=url;// 原来的url
45                             prv[1]=ec.children().first().ownText();
46                             System.out.println(prv[1]);//身份名称
47                             
48                             String ownurl=ec.children().first().attr("abs:href");
49                             prv[2]=ownurl;
50                             System.out.println(prv[2]);
51                             
52                             prv[3]=type;
53                             result.add(prv);
54                         }
55                     }
56                 }
57             }
58         }
59         return result;
60     }
61     
62     public static void main(String[] args) {
63         String url="http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2015/index.html";
64         String type="provincetr";
65         System.out.println(new Html().getProvice(url, type));
66     }
原文地址:https://www.cnblogs.com/youqc/p/10251485.html