Java爬虫之爬取中国高校排名前100名并存入MongoDB中-阿里云开发者社区

开发者社区> jclian91> 正文

Java爬虫之爬取中国高校排名前100名并存入MongoDB中

简介: 介绍   在博客:Python爬虫——爬取中国高校排名前100名并写入MySQL中,我们利用Python来写爬虫,将http://gaokao.xdf.cn/201702/10612921.html 中的大学排名表格爬取出来,并存入到MySQL中。
+关注继续查看

介绍

  在博客:Python爬虫——爬取中国高校排名前100名并写入MySQL中,我们利用Python来写爬虫,将http://gaokao.xdf.cn/201702/10612921.html 中的大学排名表格爬取出来,并存入到MySQL中。
  本次分享将用Java的Jsoup API来实现相同的功能,并将爬取到的数据存入到MongoDB数据库中。

准备

  我们将在Eclipse中写程序,因此,需要下载以下jar包:

  • bson-3.6.3.jar
  • jsoup-1.10.3.jar
  • mongodb-driver-3.6.3.jar
  • mongodb-driver-core-3.6.3.jar

新建webScraper项目和jsoupScraper包,并将以上jar包加入到项目路径中,如下图:


webScraper项目

程序

  在jsoupScraper包下新建JsoupScaper.java文件,其完整代码如下:

package jsoupScraper;

/* 本爬虫利用Jsoup爬取中国大学排血排行榜前100名
 * 并将爬取后的结果存入到MongoDB数据库中
 */

import java.util.List;
import java.util.ArrayList;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import java.net.*;
import java.io.*;

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

public class JsoupScraper {

    public static void main(String[] args) {
        String url = "http://gaokao.xdf.cn/201702/10612921.html";
        insertIntoMongoDB(url);   
    }

    // insertIntoMongoDB()函数:将爬取的表格数据插入到MongoDB中
    public static void insertIntoMongoDB(String url) {
        try{   
            // 连接到本地的 mongodb 服务
            MongoClient mongoClient = new MongoClient("localhost", 27017);

            // 连接到university数据库,不过该数据库不存在,则创建university数据库
            MongoDatabase mongoDatabase = mongoClient.getDatabase("university"); 
            System.out.println("Connect to database successfully");

            // 创建集合,该集合事先不存在
            mongoDatabase.createCollection("rank");
            System.out.println("集合创建成功");

            // 将爬取的表格数据作为文档分条插入到新建的集合中
            MongoCollection<org.bson.Document> collection = mongoDatabase.getCollection("rank");
            System.out.println("集合 test 选择成功");

            List<String> content = getContent(url);

            for(int i=2; i<content.size(); i++) {
                String[] record = content.get(i).split(" ");

                org.bson.Document document = new org.bson.Document("rank", record[0]).
                                                 append("name", record[1]).
                                                 append("province", record[2]).
                                                 append("local_rank",record[3]).
                                                 append("score", record[4]).
                                                 append("type", record[5]).
                                                 append("stars", record[6]).
                                                 append("level", record[7]);
                List<org.bson.Document> documents = new ArrayList<org.bson.Document>();
                documents.add(document);
                collection.insertMany(documents);
                System.out.println("第"+i+"条文档插入成功");

            }

            // 关闭mongodb连接
            mongoClient.close();
            System.out.println("MongoDB连接已关闭");
         }
         catch(Exception e){
             e.printStackTrace();
         }
      }

    // getContent()函数,返回爬取的表格数据
    public static List<String> getContent(String url){
        List<String> content = new ArrayList<String>();

        // 利用URL解析网址
        URL urlObj = null;
        try{
            urlObj = new URL(url);

        }
        catch(MalformedURLException e){
            System.out.println("The url was malformed!");
            return content;
        }

        // URL连接
        URLConnection urlCon = null;
        try{
            // 打开URL连接
            urlCon = urlObj.openConnection(); 
            // 将HTML内容解析成UTF-8格式
            Document doc = Jsoup.parse(urlCon.getInputStream(), "utf-8", url);
            // 刷选需要的网页内容
            Elements elems = doc.getElementsByTag("tbody").first().children();
            // 提取每个字段的文字部分
            content = elems.eachText();

            return content;
        }
        catch(IOException e){
            System.out.println("There was an error connecting to the URL");
            return content;
        }

    }
}

运行

  运行上述程序,结果如下:


程序运行结果

  前往MongoDB数据库中查看,如下图:

MongoDB数据库

结束语

  该爬虫其实并不复杂,实现的原理也很简单,我们已经用能Java和Python来实现了。希望以后能写一些关于Java爬虫的文章,欢迎大家交流~~

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9489 0
JS动态加载以及JavaScript void(0)的爬虫解决方案
Intro 对于使用JS动态加载, 或者将下一页地址隐藏为JavaScript void(0)的网站, 如何爬取我们要的信息呢? 本文以Chrome浏览器为工具, 36Kr为示例网站, 使用 Json Handle 作为辅助信息解析工具, 演示如何抓取此类网站.
5769 0
分享录制的正则表达式入门、高阶以及使用 .NET 实现网络爬虫视频教程
我发布的「正则表达式入门以及高阶教程」,欢迎学习。 课程简介 正则表达式是软件开发必须掌握的一门语言,掌握后才能很好地理解到它的威力; 课程采用概念和实验操作 4/6 分隔,帮助大家理解概念后再使用大量的实例加深对概念的理解; 实例操作是对概念最好的理解,也是学习新语言最有效的办法; 在课程中也穿插着大量软件开发的技巧和大家分享; 应该是把晦涩的正则表达式讲解的最生动的课程; 掌握了正则表达式后,您一定会觉得这是一门最值得掌握的语言。
931 0
【转】零基础写Java知乎爬虫之进阶篇
转自:脚本之家   说到爬虫,使用Java本身自带的URLConnection可以实现一些基本的抓取页面的功能,但是对于一些比较高级的功能,比如重定向的处理,HTML标记的去除,仅仅使用URLConnection还是不够的。
910 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13172 0
Java编程技巧:小爬虫程序
本文介绍Java编程技巧之小爬虫程序的编程方法。     马萨玛索(http://www.masamaso.com/index.shtml)每天10点都会推出一折商品5件,就是秒购。男装质量还不错,所以就经常去抢,感觉手动太慢了,就写了一个小爬虫程序,让自己去爬,如果是金子页面(免费商品)就会自动打开,我就可以抢到了。
713 0
Java爬虫--Https绕过证书
  https网站服务器都是有证书的。 是由网站自己的服务器签发的,并不被浏览器或操作系统广泛接受。   在使用CloseableHttpClient时经常遇到证书错误(知乎的网站就是这样)   现在需要SSL绕过证书,下面直接贴出代码,调用时只需要在发送请求后  new  HttpsBerBer(文件的字节码) ;  1 import javax.
1689 0
Python爬虫入门教程 13-100 斗图啦表情包多线程爬取
1.准备爬取斗图la写在前面 今天在CSDN博客,发现好多人写爬虫都在爬取一个叫做斗图啦的网站,里面很多表情包,然后瞅了瞅,各种实现方式都有,今天我给你实现一个多线程版本的。关键技术点 aiohttp ,你可以看一下我前面的文章,然后在学习一下。
1698 0
Java爬虫——模拟登录知乎
  登录界面,首先随意输入一个账号,登录查看发送表单的请求    可以发现请求是Post : https://www.zhihu.com/login/phone_num 发送的表单是 _xsrf: password: 密码 无需加密captcha: 验证码 无需验证码时为不用此...
1122 0
+关注
jclian91
热爱算法,热爱技术,热爱生活,期待更好的自己与明天~
126
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载