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

Java 爬蟲抓取視頻網站下載鏈接並入庫

     編輯:Java 相關知識

目標站點分析

以 https://www.80s.la/ 為例,抓取 2015 年電影列表頁分頁,進入詳情頁提取標題與迅雷下載鏈接,存入 MySQL。

爬蟲策略

  1. 僅遞歸遍歷 /movie/list/-2015----p{頁碼} 列表頁
  2. 詳情頁匹配 /movie/數字 模式,提取 <title> 與 thunder:// 鏈接
  3. 使用 LinkedHashMap 去重並保持順序
  4. 廣度優先遍歷,發現新鏈接加入待爬隊列

核心代碼片段

private Map<String, String> crawlLinks(String host, Map<String, Boolean> toVisit) {
    Map<String, String> videoLinks = new LinkedHashMap<>();
    Map<String, Boolean> newLinks = new LinkedHashMap<>();

    for (Map.Entry<String, Boolean> e : toVisit.entrySet()) {
        if (e.getValue()) continue; // 已訪問
        String url = e.getKey();
        // HTTP GET 請求...
        // 列表頁:提取所有 <a href="...">,過濾後加入 newLinks
        // 詳情頁:正則提取 title 與 thunder 鏈接,存入 videoLinks
        toVisit.put(url, true);
    }
    if (!newLinks.isEmpty()) {
        toVisit.putAll(newLinks);
        videoLinks.putAll(crawlLinks(host, toVisit)); // 遞歸
    }
    return videoLinks;
}

入庫邏輯

try (Connection conn = JDBCUtil.getConnection();
     PreparedStatement ps = conn.prepareStatement(
         "INSERT INTO movie(MovieName, MovieLink) VALUES(?,?)")) {
    for (Map.Entry<String, String> e : videoLinks.entrySet()) {
        ps.setString(1, e.getKey());
        ps.setString(2, e.getValue());
        ps.executeUpdate();
    }
}

關鍵正則

  • 列表頁鏈接:<a href="([^"\s]*)"
  • 詳情頁標題:([^\s]+).*?</title>
  • 迅雷鏈接:(thunder:[^"]+).*thunder[Rr][Ee][Ss][Tt]itle="[^"]*"

注意事項

  • 請求間隔 Thread.sleep(1000) 避免被封
  • 編碼統一 UTF-8,響應碼 200 才解析
  • 遵守 robots.txt,僅供學習研究
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved