使用java+Jsoup做简单的网络爬虫,爬取网页资源并写入数据库
文章目录
由于工作需要,我近期使用java+Jsoup做了一个简单的网络爬虫程序,都说网络爬虫需要用到Python,但是我们大Java也是可以实现的嘛哈哈 (语言没有高低之分,无引战恶意,Python党请放下你们的西瓜刀哈>_<)
闲言少叙,此次的网络爬虫主要想要做的功能是:将一些“档案类”网站上的资源(文字、图片)抓取下来,写入数据库中:
首先,我们来看一下项目的目录结构:
目录结构:
这里一共有五个包,db、main、model、parse、util。
-
db:主要放的是数据库操作文件,包含MyDataSource【数据库驱动注册、连接数据库的用户名、密码】,MYSQLControl【连接数据库,插入操作、更新操作、建表操作等】。
-
model:用来封装对象。
-
util:主要放的是httpclient的内容,主要作用时将main方法,传过来的url,通过httpclient相关方法,获取需要解析的html文件或者json文件等。
-
parse:这里面存放的是针对util获取的文件,进行解析,一般采用Jsoup解析;若是针对json数据,可采用正则表达式或者fastjson工具进行解析,建议使用fastjson,因其操作简单,快捷。
-
main:程序起点,也是重点,获取数据,执行数据库语句,存放数据。
程序执行的顺序:
首先,main方法,将url传给util获取响应的html文件,然后util将其获得的html文件,传给parse进行解析,获取最终数据,封装在集合中。解析完毕后,数据返回到main,接着main操作db将数据导入到mysql中。
效果展示:
源网页:http://www.jgsgmbwg.com/bwg.php?cid=6&page=1
结果展示:
Jsoup文档
使用Jsoup进行网页元素的抓取,详细操作请参考:https://www.jianshu.com/p/fd5caaaa950d
代码部分:
db-MyDataSource
package com.cesgroup.db;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSource;
/**
* @author :lu.kaifang
* @date :Created in 2019/9/9 11:27
* @description:用以确定此工程的数据库连接信息
* @modified By:lu.kaifang
* @version: 1.0
*/
public class MyDataSource {
public static DataSource getDataSource(String connectURI){
BasicDataSource ds = new BasicDataSource();
//MySQL的jdbc驱动
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUsername("root"); //所要连接的数据库名
ds.setPassword("root"); //MySQL的登陆密码
ds.setUrl(connectURI);
return ds;
}
}
db-MYSQLControl
package com.cesgroup.db;
import java.sql.SQLException;
import java.util.List;
import javax.sql.DataSource;
import com.cesgroup.model.SpiderModel;
import org.apache.commons.dbutils.QueryRunner;
/**
* @author :lu.kaifang
* @date :Created in 2019/9/9 11:29
* @description:使用QueryRunner方法操作数据库,使用时是batch方法
* @modified By:lu.kaifang
* @version: 1.0
*/
public class MYSQLControl {
//根据自己的数据库地址修改
static DataSource ds = MyDataSource.getDataSource("jdbc:mysql://127.0.0.1:3306/spider");
static QueryRunner qr = new QueryRunner(ds);
//第一类方法
public static void executeUpdate(String sql){
try {
qr.up