代碼地址以下:<br>http://www.demodashi.com/demo/12175.htmlhtml
由於無聊,閒來沒事作,故突發奇想,爬個種子,順便學習爬蟲。本文將介紹使用Spring/Mybatis/webmagic等框架構建項目並爬取種子磁鏈。java
以下圖爲本項目的工程結構,主要代碼實如今Spider包中。 web
參考衆多的種子網站,找到描述種子的經常使用屬性,以下: 數據庫
在抓取種子以前,首先要肯定所要抓取的網站地址、編碼、抓取時間間隔、重試次數等信息,以下:架構
//設置網站源 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";
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); }
例子用到的其餘部分代碼,如MVC,數據庫操做等,不是本章節的重點,因此不一一介紹了數據庫設計
基於webmagic的種子網站爬取ide
代碼地址以下:<br>http://www.demodashi.com/demo/12175.html學習
注:本文著做權歸做者,由demo大師代發,拒絕轉載,轉載須要做者受權網站