首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

WebMagic 爬蟲入門:幾行程式碼實現電影海報圖片抓取

     編輯:Java 相關知識

Java 爬蟲框架 WebMagic 核心 API 實戰:PageProcessor、Selector、Pipeline

WebMagic(us.codecraft.webmagic)是國產輕量級爬蟲框架,設計靈感來自 Python Scrapy。核心組件:Spider(引擎)、PageProcessor(頁面解析邏輯)、Downloader(下載)、Pipeline(結果持久化)。本範例抓取某電影海報站的標題與圖片 URL。

核心程式碼

public class MoviePaperPageProcessor implements PageProcessor {
    // 站點配置:重試 3 次、間隔 1 秒
    private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);

    @Override public Site getSite() { return site; }

    @Override public void process(Page page) {
        // 1. 提取列表頁連結(正則過濾),去重後加入待抓取隊列
        List<String> links = page.getHtml().links()
                .regex("https://posters\\.aa\\.com/poster/\\d+").all();
        links = removeDuplicate(links);
        page.addTargetRequests(links);

        // 2. 詳情頁解析:XPath 選擇器提取標題與圖片
        page.putField("title", page.getHtml()
                .xpath("//div[@id='imdbleftsecc']/center/h1/text()").toString());
        page.putField("imgurl", page.getHtml()
                .xpath("//div[@id='imdbleftsecc']/center/img/@src").toString());
        
        // 3. 結果將自動流入 Pipeline(需另行配置 ConsolePipeline、FilePipeline、DB 等)
    }

    // 簡單去重
    public static List<String> removeDuplicate(List<String> list) {
        return new ArrayList<>(new HashSet<>(list));
    }

    public static void main(String[] args) {
        for (int i = 1; i <= 3; i++) {
            Spider.create(new MoviePaperPageProcessor())
                  .addUrl("https://posters.aa.co/poster_page/" + i)
                  .thread(5) // 5 執行緒並發
                  .run();
        }
    }
}

關鍵 API 說明

API用途
page.getHtml().links().regex(...).all()提取所有 <a href> 並正則過濾
page.getHtml().xpath(...).toString()XPath 單值提取(首個匹配)
page.putField(key, value)將解析結果放入 ResultItems 供 Pipeline 使用
page.addTargetRequests(urls)動態發現新 URL 加入調度隊列
Spider.thread(n)設定下載/解析執行緒數

生產級擴展清單

  1. Pipeline 持久化:實作 Pipeline 介面存入 MySQL/ElasticSearch/MinIO,或用內建 FilePipeline、JsonFilePipeline。
  2. 反爬應對:Site 設定 User-Agent、Cookie、Proxy;整合 SeleniumDownloader 處理 JS 渲染頁面。
  3. 分佈式:整合 Redis(RedisScheduler、RedisPipeline)實現多節點協作去重。
  4. 監控與容錯:統計下載成功率、錯誤碼分佈;實作 SpiderListener 記錄生命週期事件。
  5. 合規性:遵守 robots.txt、限制頻率、檢查法律風險。

Maven 依賴

<dependency>
  <groupId>us.codecraft</groupId>
  <artifactId>webmagic-core</artifactId>
  <version>1.2.1</version> <!-- 查詢最新版 -->
</dependency>
<dependency> <!-- XPath 支援需額外引入 -->
  <groupId>us.codecraft</groupId>
  <artifactId>webmagic-extension</artifactId>
  <version>1.2.1</version>
</dependency>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved