1. 程式人生 > 程式設計 >web爬蟲系列(一)- 爬取電影天堂迅雷地址

web爬蟲系列(一)- 爬取電影天堂迅雷地址

一、爬蟲介紹

目前爬蟲框架層出不窮,當然很多公司也會根據自己的業務做二次開發,Java的有WebMagic和WebCollector等,Python的有PySpider和Scrapy等。不能說孰好孰壞,只能說根據自己的業務場景選擇不同框架,Python作為爬蟲的開發語言已經火的一塌糊塗,但是我為什麼選擇Java語言呢?因為我不會Python,也不想勞神費力再學一門語言,那就從Java的WebMagic玩起吧。

爬蟲的應用場景也各色各異,比如有好玩的同學喜歡爬取網易雲音樂的熱門評論、還有人爬各種招聘網站的在招職位。商業用途也有很多,比如競品分析、全球POI更新等等。

二、入門示例–爬去電影天堂的下載

1、簡單分析頁面


紅色1是我們要的內容,紅色2是對應的html結構。

2、maven匯入如下jar包

<dependency>
   <groupId>us.codecraft</groupId>
   <artifactId>webmagic-core</artifactId>
   <version>0.7.3</version>
</dependency>
<dependency>
   <groupId>us.codecraft</groupId>
   <artifactId>webmagic-extension</artifactId>
   <version>0.7.3</version>
</dependency>
複製程式碼

3、解析dom,獲取到電影名稱及其對應的詳情頁連結

package com.daervin.demo;

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.selector.Html;
import us.codecraft.webmagic.selector.Selectable;

import java.util.List;

public class FilmProcessor implements PageProcessor {

   public static final String URL = "http://www.dytt8.net"
; @Override public void process(Page page) { Html html = page.getHtml(); //解析列表頁 List<Selectable> contentNodes = html.xpath("//div[@class='co_content2']/ul/a").nodes(); for (int i = 1; i < contentNodes.size(); i++) { //第一條過濾,從第二條開始遍歷 Selectable linkNode = contentNodes.get(i); if (linkNode == null) { continue; } String linkTmp = linkNode.links().get(); if (linkTmp != null && linkTmp.length() > 0) { //將找到的連結放到addTargetRequest裡面,會自動發起請求 page.addTargetRequest(linkTmp); //輸出到控制檯 System.out.println(linkTmp); } } } @Override public Site getSite() { return Site.me().setTimeOut(10000); } } 複製程式碼

4、執行爬蟲並列印結果

package com.daervin.demo;

import us.codecraft.webmagic.Spider;

public class FilmTest {
   public static void main(String[] args) {
       Spider.create(new FilmProcessor()).addUrl(FilmProcessor.URL).run();
   }
}
複製程式碼


只是拿到了列表對應的詳情頁地址,沒達到獲取下載地址的目的!繼續...

5、分析詳情頁 - 深入爬取詳情頁

獲取到電影名稱和迅雷下載地址


package com.daervin.demo;

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.selector.Html;
import us.codecraft.webmagic.selector.Selectable;

import java.util.List;

public class FilmProcessor implements PageProcessor {

   public static final String URL = "http://www.dytt8.net";

   @Override
   public void process(Page page) {
       Html html = page.getHtml();
       //解析列表頁
       if (URL.equals(page.getUrl().toString())) {
           //抽取結果
           List<Selectable> contentNodes = html.xpath("//div[@class='co_content2']/ul/a").nodes();
            for (int i = 1; i < contentNodes.size(); i++) {
               //第一條過濾,從第二條開始遍歷
               Selectable linkNode = contentNodes.get(i);
               if (linkNode == null) {
                   continue;
               }
               String linkTmp = linkNode.links().get();
               if (linkTmp != null && linkTmp.length() > 0) {
                   //將找到的連結放到addTargetRequest裡面,會自動發起請求
                   page.addTargetRequest(linkTmp);
                   //輸出到控制檯
                   System.out.println(linkTmp);
               }
           }
       } else {//解析電影詳情頁面
           //獲取html
           Selectable movieNameS = html.xpath("//title/text()");
           Selectable movieDownloadS = html.xpath("//a[starts-with(@href,'ftp')]/text()");
            System.out.println("movieName:" + movieNameS.get());
           System.out.println("downloadURL:" + movieDownloadS.get());
           System.out.println("-----------------------------------");
       }
   }

   @Override
   public Site getSite() {
       return Site.me().setTimeOut(10000);
   }
}
複製程式碼


三、亂彈琴

菜鳥一隻,歡迎交流。