基於webmagic的種子網站爬取

代碼地址以下:<br>http://www.demodashi.com/demo/12175.htmlhtml

1. 概述

由於無聊,閒來沒事作,故突發奇想,爬個種子,順便學習爬蟲。本文將介紹使用Spring/Mybatis/webmagic等框架構建項目並爬取種子磁鏈。java

2. 項目搭建

以下圖爲本項目的工程結構,主要代碼實如今Spider包中。 項目結構圖web

3. 數據庫設計

參考衆多的種子網站,找到描述種子的經常使用屬性,以下: 數據庫

4. 程序實現

1. 爬蟲配置

在抓取種子以前,首先要肯定所要抓取的網站地址、編碼、抓取時間間隔、重試次數等信息,以下:架構

//設置網站源
	private static String netSite="PushBT";

	private Site site = Site.me().setDomain("http://www.pushbt.com")
			.setCharset("UTF-8").setSleepTime(1000)//編碼
			.setRetryTimes(3);//重試次數
	private static String  BASE_URL="http://www.pushbt.com";
2. 邏輯編寫

process方法是爬蟲的核心接口,全部的屬性抽取都在此方法中實現框架

@Override
	public void process(Page page) {
		//定義如何抽取頁面信息,並保存下來
		List<String> links = page.getHtml().xpath("//table[@class='items']//tr[@class='odd']/td[2]/a/@href").all();
		//將須要待爬的網頁地址都存下來,以待後續從中取出
		targetUrlList=StringUtil.linkURL(BASE_URL, links);
		page.addTargetRequests(targetUrlList);
		Seeds seed = new Seeds();
		// 獲取名稱
		String name = page.getHtml().xpath("//ul[@id='filelist']//li/span/@title").toString();
		if (name==null||"".equals(name)||service.isExistByName(name)) {//名稱爲空,則跳過;已存在(true),則跳過
			page.setSkip(true);
			count++;
			LOG.info("skip the "+count+" ,title : "+name);
			return;
		}
		page.putField("name", name);
		seed.setSeedName(name);
		// 獲取hash值(無hash值,默認爲null)
//		String hash = page.getHtml().xpath("//p[@class='dd desc']//b[2]/text()").toString();
		page.putField("hash", null);
		seed.setSeedHash(null);
		// 描述(沒有描述信息,則默認爲名稱)
//		String desc = page.getHtml().xpath("//div[@class='dd filelist']/p/text()").toString();
		page.putField("desc", name);
		seed.setSeedDes(name);
		// 文件個數
		String number = page.getHtml().xpath("//ul[@class='params-cover']/li[4]/div[@class='value']/text()").toString();
		page.putField("number", number);
		seed.setNumber(number);
		// 文件大小
		String size = page.getHtml().xpath("//ul[@class='params-cover']/li[5]/div[@class='value']/text()").toString();
		page.putField("size", size);
		seed.setSize(size);
		// 獲取收錄時間
		String includeDate = page.getHtml().xpath("//ul[@class='params-cover']/li[2]/div[@class='value']/text()").toString();
		page.putField("includeDate", includeDate);
		seed.setIncludeTime(includeDate);
		//最近下載時間
		String recentlyDown = page.getHtml().xpath("//ul[@class='params-cover']/li[3]/div[@class='value']/text()").toString();
		page.putField("recentlyDown", recentlyDown);
		seed.setRecentlyDown(recentlyDown);
		// 人氣
		String popularity = page.getHtml().xpath("//ul[@class='params-cover']/li[6]/div[@class='value']/text()").toString();
		page.putField("popularity", popularity);
		seed.setPopularity(popularity);
		// 下載速度
//		String speed = page.getHtml().xpath("//p[@class='dd desc']//b[7]/text()").toString();
		page.putField("speed", SpiderUtil.getSpeed(popularity));
		seed.setSpeed(SpiderUtil.getSpeed(popularity));
		// 獲取磁力連接
		String magnet = page.getHtml().xpath("//ul[@class='params-cover']/li[9]/div[@class='value']/a/@href").toString();
		page.putField("magnet", magnet);
		seed.setMagnet(magnet);
		// 標籤(在詳情頁面沒有tag,暫時以熱門搜索爲tag)
		List<String> tags = page.getHtml().xpath("//div[@class='block oh']/a/span/text()").all();
		page.putField("tags", tags);
		seed.setTag(tags.toString());
		seed.setCreateTime(new Date());
		seed.setUpdateTime(new Date());
		seed.setSource(netSite);
		seed.setCategory("movies");
		//保存到數據庫
		service.insert(seed);
	}
3. 其它部分編寫

例子用到的其餘部分代碼,如MVC,數據庫操做等,不是本章節的重點,因此不一一介紹了數據庫設計

5. 成果展現

基於webmagic的種子網站爬取ide

代碼地址以下:<br>http://www.demodashi.com/demo/12175.html學習

注:本文著做權歸做者,由demo大師代發,拒絕轉載,轉載須要做者受權網站

相關文章
相關標籤/搜索