基于Java的DBLP数据库爬虫系统

时间:2022-08-10 16:58:32

项目平台

笔记本电脑系统:Ubuntu 16.04.2 LTS
Java version “1.8.0_51”
Mysql Server version: 5.7.17
可视化数据库管理工具:MySQL Workbench 6.3
Java version “1.8.0_51”
相关jar包:c3p0-0.9.2.1,jsoup-1.10.2,mchange-commons-java-0.2.3.4,mysql-connector-java-5.1.34-bin

实现功能

  Java爬虫系统,对DBLP(http://dblp.uni-trier.de/)中的论文信息进行爬取,爬取信息包括论文题目、作者、论文发表的会议名称、页码、年份、开会地点、开会日期等信息。姓名的姓和名分两个字段存储。将上述数据存入Mysql数据库。

基本过程

1.获取HTML
  使用HttpURLConnection获取网页源代码字符串。实现了动态页面的加载(通过Chrome DevTools对网页请求进行分析,按F12键,http://dblp.dagstuhl.de/search/publ/inc?q=ASPLOS&h=2&f=0,拿到这个请求链接后,只要修改其中的q(会议名),h(加载的论文数),f(开始位置)三个部分的值即可)。
2. 解析HTML
使用Jsoup进行HTML的解析(相比正则表达式,大大减少了脑力劳动)。
3.存入数据库
使用Mysql数据库,使用JDBC在Java程序中与数据库建立连接、发送操作数据库的语句并处理结果。
用两张表,一张表论文名加作者,一张表论文名加其他信息。

一些优化

  实现了多线程爬虫,大大加快了爬取速度。(我的电脑开10个线程,CPU四核在40%左右,网速2MB/s左右,我的电脑应该开20个线程压力不大,速度还可以再提升)。
  使用数据库连接池及数据库批处理加快数据的插入。JDBC连接池使用的是C3P0。

不足

  我是从搜索框开始搜索爬取相关信息,然后对结果过滤,这样会下载到大量无用页面,解析后才能发现无用,浪费了不少时间,做了不少无用功。

结果

String[] conferenceName = {“AAAI”, “ASPLOS”, “CCS”, “CHI”, “CRYPTO”,”CVPR”,”EUROCRYPT”,”FAST”,”FOCS”,”HPCA”,”ICCV”,
“ICDE”,”ICML”,”ICSE”,”IJCAI”,”INFOCOM”,”ISCA”,”LICS”,”MICRO”,
“MOBICOM”,”SIGCOMM”,”SIGGRAPH”,”SIGIR”,”SIGKDD”,
“SIGMOD”,”SOSP”,”MM”,”OOPSLA”,”OSDI”,”PLDI”,”POPL”,
“RTSS”,”SECURITY”,”SP”,”STOC”,”UBICOMP”,”VIS”,”VLDB”};
暂时爬取了这些会议。
将会议名放入数组中即可进行爬取。具体代码在我的GitHub上:
https://github.com/qian135/DBLPJavaSpider