WebMagic是一個簡單靈活的Java爬蟲框架 。
官網地址:http://webmagic.io/
文檔地址:http://webmagic.io/docs/zh/
源碼:
-
https://github.com/code4craft/webmagic
上手使用:
使用maven的項目,在pom文件中,引入相關依賴包,如下:
<!-- webmagic依賴包 start --> <dependency> <groupId>us.codecraft</groupId> <artifactId>webmagic-core</artifactId> <version>0.7.4</version> </dependency> <dependency> <groupId>us.codecraft</groupId> <artifactId>webmagic-extension</artifactId> <version>0.7.4</version> </dependency> <dependency> <groupId>us.codecraft</groupId> <artifactId>webmagic-selenium</artifactId> <version>0.7.4</version> </dependency> <!-- webmagic依賴包 end -->
直接上代碼:
public class WebMagic implements PageProcessor {
private Site site = Site.me().setRetryTimes(3).setSleepTime(100);
private static String website = "http://www.ynbb.gov.cn/jgjj/dwjg";
//省委編辦
private static String shengwei = "http://www.ynbb.gov.cn/jgjj/dwjg";
//昆明編辦
private static String kunming = "http://km.ynbb.gov.cn/jgjj/jggk/dwjg";
//昭通編辦
private static String zhaotong = "http://zt.ynbb.gov.cn/jggk/dwjg";
//曲靖編辦
private static String qujing = "http://qj.ynbb.gov.cn/jggk/dwjg";
//玉溪編辦
private static String yuxi = "http://yx.ynbb.gov.cn/";
//保山編辦
private static String baoshan = "http://bs.ynbb.gov.cn/wzxg/jggk/dwjg";
//楚雄編辦
private static String chuxiong = "http://cx.ynbb.gov.cn/";
//紅河編辦
private static String honghe = "http://hh.ynbb.gov.cn/";
//文山編辦
private static String wenshan = "http://ws.ynbb.gov.cn/jggk/dwjg";
//普洱編辦
private static String puer = "http://pe.ynbb.gov.cn/jggk/dwjg";
//西雙版納編辦
private static String xishuangbanna = "http://xsbn.ynbb.gov.cn/";
//大理編辦
private static String dali = "http://dl.ynbb.gov.cn/jgjj/jggk/dwjg";
//德宏編辦
private static String dehong = "http://dh.ynbb.gov.cn/jggk/dwjg";
//麗江編辦
private static String lijiang = "http://lj.ynbb.gov.cn/jggk/dwjg";
//怒江編辦
private static String nujiang = "http://nj.ynbb.gov.cn/";
//迪慶編辦
private static String diqing = "http://dq.ynbb.gov.cn/jgjj/jggk/dwjg";
//臨滄編辦
private static String licang = "http://lc.ynbb.gov.cn/";
static List<String> allLeftMenuName = new ArrayList<>();
static List<String> allLeftMenuLinks = new ArrayList<>();
//標誌位
public static boolean flag = true;
public static void main(String[] args) {
Spider.create(new WebMagic()).addUrl(diqing).thread(5).run();
for(int i =0;i < allLeftMenuLinks.size();i++) {
System.out.println("左側菜單名稱:" + allLeftMenuName.get(i));
Spider.create(new WebMagic()).addUrl(allLeftMenuLinks.get(i)).thread(5).run();
}
}
@Override
public Site getSite() {
return site;
}
@Override
public void process(Page page) {
System.out.println("爬蟲開始。。。。。");
try {
if (page.getUrl().regex(diqing).match() && flag) {
//雲南省委及各市全部站點(暫時有點問題)
// List<String> allWebSiteLinks = page.getHtml().xpath("//div[@class=\"con\"]").all();
// System.out.println("雲南省委及各市全部站點:"+allWebSiteLinks);
allLeftMenuLinks = page.getHtml().xpath("//div[@id=\"sideMenu\"]//div[@class=\"bd\"]/ul/li").links().all();
// System.out.println("左側樹全部鏈接:"+allLeftMenuLinks);
//所有左側菜單的名字
allLeftMenuName = page.getHtml().xpath("//div[@id=\"sideMenu\"]//div[@class=\"bd\"]/ul/li/a/text()").all();
// System.out.println("所有左側菜單的名字:"+allLeftMenuName);
// for(int i =0;i<allLeftMenuName.size()+1;i++) {
// //左側樹全部鏈接
// List<String> allLeftMenuLinks = page.getHtml().xpath("//div[@class=\"sideBox\"]//div[@class=\"bd\"]/ul/li["+i+"]").links().all();
// System.out.println("左側樹"+i+"鏈接:"+allLeftMenuLinks);
// }
//所有對應鏈接的title
// List<String> allTitles = page.getHtml().xpath("//div[@class=\"hd\"]/span/text()").all();
// System.out.println("所有對應鏈接的title:"+allTitles);
//所有對應鏈接的機構名稱
// List<String> allLeftMenuName = page.getHtml().xpath("//div[@class=\"row\"]//div[1]//div[@class=\"bd\"]/ul/li/a/text()").all();
// System.out.println("所有對應鏈接的機構名稱:"+allLeftMenuName);
flag = false;
}else {
//所有對應鏈接的title
//省委
// List<String> allTitles = page.getHtml().xpath("//div[@class=\"hd\"]/span/text()").all();
//昆明、昭通
List<String> allTitles = page.getHtml().xpath("//div[@class=\"boxLoop\"]//div[@class=\"hd\"]/h3/text()").all();
System.out.println("所有對應鏈接的title:"+allTitles);
// List<String> allTitles = page.getHtml().xpath("//div[@class=\"mHd\"]/h3/text()").all();
// System.out.println("所有對應鏈接的title:"+allTitles);
for(int m = 1;m<allTitles.size()+1;m++) {
//所有對應鏈接的機構名稱
//省委
// List<String> allLeftMenuName = page.getHtml().xpath("//div[@class=\"row\"]//div["+m+"]//div[@class=\"bd\"]/ul/li/a/text()").all();
//昆明、昭通
List<String> allLeftMenuName = page.getHtml().xpath("//div[@class=\"boxLoop\"]//div["+m+"]//div[@class=\"bd\"]/ul/li/a/text()").all();
System.out.println("所有對應鏈接的機構名稱:"+allLeftMenuName);
// List<String> allLeftMenuName = page.getHtml().xpath("//div[@class=\"mBd\"]/ul/li/a/text()").all();
// System.out.println("所有對應鏈接的機構名稱:"+allLeftMenuName);
}
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("爬蟲結束。。。。。");
}
}
```
可以根據項目需求就行數據庫存儲,新建定時任務