一、导入jar包(webcollector,mysql)css
二、代码以下:mysql
public class TutorialCrawler extends BreadthCrawler {web
public TutorialCrawler(String crawlPath, boolean autoParse) {
super(crawlPath, autoParse);
}
public void visit(Page page, CrawlDatums next) {
// 驱动程序名
String driver = "com.mysql.jdbc.Driver";
// URI指向要访问的数据库名
//若是报错在数据库明后添加 ?useUnicode=true&characterEncoding=UTF-8
String uri="jdbc:mysql://服务器地址/数据库名";
// MySQL配置时的用户名
String user = "**";
// MySQL配置时的密码
String password = "********";
//判断URL是否匹配
if (page.matchUrl("http://.*")) {
//设置关键字段
String t1="藏品征集";
String t2="征集公告";
String t3="藏品征集的";
String t4="藏品的公告";
String t5="征集藏品";
//获取符合规则网页的body的文字
String cont = page.select("body").first().text();
//判断是否含有关键字
boolean con1 = cont.contains(t1);
boolean con2 = cont.contains(t2);
boolean con3 = cont.contains(t3);
boolean con4 = cont.contains(t4);
boolean con5 = cont.contains(t5);
//若是知足条件,存入数据库
if(con1||con2||con3||con4||con5){
//能够经过正则表达式进行筛选,这里举了个例子,能够看下。
/*==>举例开始<==
//测测你有多了解奥运会? 13754人测试过 0次收藏 2016-08-06 69条评论 共 10 题
String regex = " (\\d{1,})人测试过 (\\d{1,})次收藏 (.{10}) (\\d{1,})条评论 共 (\\d{1,}) 题";
Pattern p = Pattern.compile(regex);//得到正则对象
Matcher m = p.matcher(text);//得到比较器,从而得到比较结果,这里要把原始的字符串传递进去
while(m.find()){//经过循环获取比较结果
String testnum = m.group(1);//测试人数
String favnum = m.group(2);
String createTime = m.group(3);
String replynum = m.group(4);
String questionNum = m.group(5);
System.out.println(testnum + "|" + favnum + "|" + createTime + "|" + replynum );
}
Elements img = page.select("div.tshow>p.pbox>img");
System.out.println("图片地址为:" + img.attr("src"));
System.out.println("描述信息:" + page.select("p.tdesc").text());
==>举例结束<==*/
//获取网页的URL
String url=page.getUrl();
try {
// 加载驱动程序
Class.forName(driver);
// 连续数据库
Connection conn = DriverManager.getConnection(uri, user, password);
if(!conn.isClosed())
System.out.println("Succeeded connecting to the Database!");
System.out.println(cont);
// statement用来执行SQL语句
Statement statement = (Statement) conn.createStatement();
// 要执行的SQL语句
String sql = "INSERT INTO zkxa_crawler (url,content) VALUES ('"+url+"','"+cont+"')";
// 结果集
statement.executeUpdate(sql);
System.out.println("======插入成功======");
conn.close();
} catch(ClassNotFoundException e) {
System.out.println("Sorry,can`t find the Driver!");
e.printStackTrace();
} catch(SQLException e) {
e.printStackTrace();
System.out.println("======SQLException======");
} catch(Exception e) {
e.printStackTrace();
System.out.println("======插入失败======");
}
}else {
}
}
}正则表达式
public static void main(String[] args) throws Exception {
//构造函数中两个参数分别抓取器的id与是否解析网页true
TutorialCrawler crawler = new TutorialCrawler("crawler", true);
//定义抓取的入口
crawler.addSeed("https://www.baidu.com");
//筛选URL的过滤条件
crawler.addRegex("http://.*");
/*禁止爬取图片*/
crawler.addRegex("-.*png.*");
crawler.addRegex("-.*jpg.*");
crawler.addRegex("-.*gif.*");
crawler.addRegex("-.*js.*");
crawler.addRegex("-.*css.*");
/*断点续爬功能开启
dc.setResumable(true);*/
//同时启动多少个线程进行抓取
crawler.setThreads(10);
//启动爬虫,向下爬10层
crawler.start(5);
}
}sql
若有BUG或者须要jar包,加我微信!数据库