Java爬虫之爬取中国高校排名前100名并存入MongoDB中
介绍
在博客: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包加入到项目路径中,如下图:
程序
在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数据库中查看,如下图:
结束语
该爬虫其实并不复杂,实现的原理也很简单,我们已经用能Java和Python来实现了。希望以后能写一些关于Java爬虫的文章,欢迎大家交流~~

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Confluence 6 如何删除用户组图文教程
选择基本配置 选择用户组操作界面 在用户组列表中选择用户组 在界面中选择希望删除的用户组名字后面的删除按钮选项。 确定用户组删除 系统会给出提示确定用户组是否确定删除,你需要单击 Confirm 确定你对用户组的删除。 当系统对用户组删除后,会返回到用户组列表的页面,你可以在这个页面中继续对用户组进行相关操作。 https://wiki.ossez.com/index.php/Confluence_6_如何删除用户组图文教程
-
下一篇
Java并发编程
前奏 1、多线程一定比单线程快吗? 比如一个炉子烤烧饼,一次烤一个快还是轮询烤快? 一次烤多个在切换时就会浪费炉火,所有不一定多个快。 但多个炉火轮询这就会很快 对应到计算机: 烤炉=cpu 轮询=任务切换 cpu通过一定算法分配cpu时间片,线程通过获取cpu时间片来执行 2、迅雷多线程下载 迅雷多线程下载其实不是多线程性能高进而提高了下载速度,而是因为迅雷做了流量限制(比如限制每个连接峰值200k),此时使用多线程,就突破了服务器的峰值显示,就相当于开了多个连接同时下载,进而提供下载速度。 线程状态 这里写图片描述 图中是线程运行的基本状态:线程调用start()方法开始后,就进入到可运行状态,随着CPU的资源调度在运行和可运行之间切换;遇到阻塞则进入阻塞状态。 Java中创建线程的三种方法以及区别 Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。Java可以用三种方式来创建线程,如下所示: 继承Thread类创建线程 实现Runnable接口创建线程 使用Callable和Future创建线程 线程池创建线程 下面让我们分别来看看这三种创建...
相关文章
文章评论
共有0条评论来说两句吧...