如何使用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
相关产品推荐
相关产品推荐

