WebMagic的簡單使用

WebMagic是一個簡單靈活的Java爬蟲框架 。

官網地址:http://webmagic.io/

文檔地址:http://webmagic.io/docs/zh/

源碼:

  • https://git.oschina.net/flashsword20/webmagic

  • 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("爬蟲結束。。。。。");
    	}
    }
    
    ```

可以根據項目需求就行數據庫存儲,新建定時任務 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章