一、導入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包,加我微信!數據庫