ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java爬虫项目实战(一)

2019-01-10 18:00:46  阅读:394  来源: 互联网

标签:url String document prv html http 899942


主网站链接:

           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     }

 

标签:url,String,document,prv,html,http,899942
来源: https://www.cnblogs.com/youqc/p/10251485.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有