如何抓取含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
相关产品推荐
相关产品推荐

