You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何抓取含A-Z字母标签且多分页的网站并提取全部URL?

解决A-Z分类+分页的网页URL全量提取方案

嘿,我来帮你搞定这个A-Z分类加分页的URL抓取需求!咱们先理清楚核心逻辑,再补全代码实现:

核心思路

  • 第一步:遍历A-Z所有字母标签,构造每个字母对应的初始分页页面URL(具体格式要根据目标网站的URL规则调整,比如https://example.com/list/A这类模板)
  • 第二步:对每个字母的页面,先提取当前页内的所有目标URL;接着判断是否存在下一页,如果有就跳转到下一页重复提取,直到该字母分类下的所有分页都处理完
  • 第三步:用Jsoup(Java生态里最常用的HTML解析库)来处理网页请求和DOM解析,简化开发流程

完整代码实现

首先确保你已经在项目里引入了Jsoup依赖(Maven的话在pom.xml里加依赖,Gradle同理),然后补全你的main方法:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;

public class UrlScraper {
    public static void main(String[] args) throws Exception {
        // 遍历A到Z所有字母分类
        for (char c = 'A'; c <= 'Z'; c++) {
            String currentLetter = String.valueOf(c);
            // 替换成目标网站的字母分类初始URL模板
            String currentPageUrl = "https://target-site.com/category/" + currentLetter + "?page=1";
            
            // 循环处理当前字母下的所有分页
            while (currentPageUrl != null) {
                try {
                    // 模拟浏览器发起HTTP请求,获取页面文档
                    Document doc = Jsoup.connect(currentPageUrl)
                            .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36")
                            .timeout(10000)
                            .get();
                    
                    // 提取当前页的目标URL(这里需要根据目标网站的DOM结构调整选择器)
                    // 示例:假设目标URL都在class为"item-card-link"的a标签里
                    Elements linkElements = doc.select("a.item-card-link");
                    for (Element link : linkElements) {
                        String targetUrl = link.absUrl("href"); // 获取绝对URL,避免相对路径问题
                        System.out.println("提取到URL:" + targetUrl);
                        // 这里可以把URL存入数据库、写入文件,按需处理
                    }
                    
                    // 判断是否存在下一页,更新currentPageUrl(同样要根据目标网站的分页DOM调整)
                    // 示例:假设下一页按钮的a标签有class"pagination-next"
                    Element nextPageBtn = doc.selectFirst("a.pagination-next");
                    if (nextPageBtn != null) {
                        currentPageUrl = nextPageBtn.absUrl("href");
                    } else {
                        // 没有下一页,结束当前字母的分页循环
                        currentPageUrl = null;
                    }
                    
                    // 加1秒延迟,避免请求太频繁触发网站反爬
                    Thread.sleep(1000);
                    
                } catch (IOException e) {
                    System.err.println("处理页面" + currentPageUrl + "时出错:" + e.getMessage());
                    // 出错时直接跳过当前页,你也可以根据需求改成重试逻辑
                    currentPageUrl = null;
                }
            }
        }
    }
}

关键注意事项

  • DOM选择器调整:代码里的a.item-card-link和a.pagination-next都是示例选择器,你需要打开目标网站的开发者工具,查看实际的元素class或id,替换成正确的选择器
  • 反爬应对:添加user-agent模拟浏览器请求,设置请求延迟,避免触发网站的反爬机制;如果网站需要登录或有Cookie验证,还要在Jsoup请求里添加对应Cookie
  • 异常处理:网络请求可能因为各种原因失败,一定要加异常捕获,避免整个程序崩溃
  • URL去重:如果目标网站可能存在重复URL,可以用HashSet来存储,自动实现去重逻辑

内容的提问来源于stack exchange,提问作者serendipity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:52:04