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

如何使用Jsoup从Google多页面或指定页面抓取URL与标题?

如何用Jsoup抓取Google多页搜索结果

嘿,我来帮你搞定Google多页抓取的问题!首先得摸清楚Google搜索的分页规律——它靠start参数控制翻页:比如你设置num=20(每页20条结果),第一页是start=0,第二页就是start=20,第三页start=40,以此类推。基于这个规律,我们可以通过循环遍历指定页数,或者直到没有更多结果为止。

核心实现思路

  • 构造带start参数的分页URL
  • 循环发起请求,每次递增start的值
  • 处理Google的跳转链接(提取真实目标URL)
  • 加入反爬防护(合理UA、请求延迟)

完整代码示例

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.net.URLEncoder;
import java.io.UnsupportedEncodingException;

public class GoogleMultiPageScraper {
    public static void main(String[] args) {
        String searchString = "你的搜索关键词";
        int maxPages = 5; // 可自定义要抓取的最大页数
        int resultsPerPage = 20;
        String charset = "UTF-8";
        // 用真实浏览器的UA,避免被Google拦截(可以换成你当前浏览器的UA)
        String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36";

        try {
            for (int page = 0; page < maxPages; page++) {
                int start = page * resultsPerPage;
                // 构造带分页参数的搜索URL
                String googleUrl = String.format(
                    "http://www.google.com/search?q=%s&num=%d&start=%d",
                    URLEncoder.encode(searchString, charset),
                    resultsPerPage,
                    start
                );
                
                // 加入请求延迟,避免触发反爬机制
                Thread.sleep(2000);
                Document doc = Jsoup.connect(googleUrl)
                        .userAgent(userAgent)
                        .get();
                
                // 抓取搜索结果的标题和链接
                Elements links = doc.select(".g>.r>a");
                if (links.isEmpty()) {
                    System.out.println("没有更多搜索结果了,停止抓取");
                    break;
                }
                
                System.out.println("===== 第" + (page + 1) + "页结果 =====");
                for (Element link : links) {
                    String title = link.text();
                    String url = link.attr("href");
                    // 处理Google的跳转链接,提取真实URL
                    if (url.startsWith("/url?q=")) {
                        url = url.substring(7);
                        if (url.contains("&")) {
                            url = url.split("&")[0];
                        }
                    }
                    System.out.println("标题: " + title);
                    System.out.println("链接: " + url);
                    System.out.println("---");
                }
                
                // 检查是否存在下一页,没有就提前终止循环
                Element nextPageBtn = doc.selectFirst("#pnnext");
                if (nextPageBtn == null) {
                    System.out.println("已经到最后一页了");
                    break;
                }
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("请求出错,可能被Google拦截了,请检查UA或增加延迟");
        }
    }
}

关键注意事项

  • UA设置:一定要用真实浏览器的User-Agent,不要用自定义的Bot名称,否则很容易被Google拦截
  • 请求延迟:必须加入Thread.sleep()控制请求频率,建议每次间隔2-5秒
  • 链接处理:Google返回的是跳转链接(格式为/url?q=真实链接&...),需要提取出真实目标URL
  • 终止条件:可以同时用maxPages和下一页按钮的存在状态来控制循环,避免无效请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:30:14