使用 Java Web 抓取谷歌搜索结果
微信搜索关注《Java学研大本营》,加入读者群,分享更多精彩
介绍
Java被列为最古老和最受欢迎的编程语言之一。它的受欢迎程度从它在超过 10 亿台安卓设备上运行这一事实就可以看出。
它也是最强大的多线程语言之一,可用于执行各种任务。它可以完成的有用任务之一是网页抓取。
网页抓取是从网站或其他来源提取或收集数据并以所需格式存储的过程。它用于各种任务,例如数据挖掘、价格监控、潜在客户生成、搜索引擎优化等。企业可以使用抓取的数据做出明智的决策并获取有关其目标市场的信息。
在此博客中,我们将学习如何使用 Java 及其库抓取 Google 搜索结果。
为什么用 Java 来抓取 Google?
Java 是一种非常易于初学者理解的语言。可用于 Java 的社区支持也很大,这可以帮助您在编写爬虫程序时面对任何错误。
您可以通过在 Reddit 和 Discord 中的大型社区提问来解决您的错误。
Java 是一门强大的语言,在其高性能能力的支持下,它可以成为抓取 Google 的一个不错的选择。
使用 Java 抓取谷歌搜索结果
在此博客中,我们将设计一个基于 Java 的脚本来抓取前 10 个 Google 搜索结果。输出将由相应结果的链接、标题、描述和位置组成。此数据可用于各种目的,如 SEO、媒体监控、广告验证等。
谷歌搜索结果抓取分为两部分:
-
通过对目标 URL 发出 HTTP 请求来提取 HTML 数据。
-
解析 HTML 以获取所需的数据。
要求:
许多 Java 库可用于抓取 Google 搜索结果,但在本教程中,我们将使用:
-
Jsoup — 它是一个 Java 库,可用于提取和解析 HTML。
设置:
创建一个文件夹并使用您想要的名称和 .java 扩展名保存文件。如果您还没有安装 Java,可以通过阅读以下文章进行安装:
-
如何在 Windows 上安装 Java?https://www.windows11.dev/ce7in/java-55a9
-
如何在 MacOS 上安装 Java?https://www.geeksforgeeks.org/how-to-install-java-on-macos/
过程:
所以,我们已经建立了我们的 Java 项目来抓取谷歌。我们现在将使用 Jsoup 通过将此 URL 作为参数传递来与 Google 网页建立连接:
https://www.google.com/search?q=Java&gl=us
您可以在 URL 中选择任何查询和位置。
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 GoogleScraper {
public static void main(String[] args) throws IOException {
String googleUrl = "https://www.google.com/search?q=java&gl=us";
// Connect to the Google search page
Document doc = Jsoup.connect(googleUrl).userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36").get();
// Document object represents the HTML dom (Talking about "doc" here)
分步说明:
-
首先,我们从jsoup库和Java io包中导入了所有需要的类。
-
声明类和主要方法后,我们初始化了我们的 Google URL。
-
之后,我们在 JSOUP 的连接方法的帮助下使用 URL 和用户代理与 Google 网页建立连接。然后我们借助get方法提取 HTML 数据并将其存储在文档数据类型中。
User-Agent用于识别请求用户代理的应用程序、操作系统、供应商和版本,这可以避免假冒真实用户访问 Google。
这将帮助我们提取原始 HTML 代码。然后我们将在 select 方法的帮助下解析这个 HTML。
让我们首先确定我们必须从 HTML 中选择的标签以获取所需的数据。
如果您检查 HTML,您会发现每个结果都包含在类名为g的“ div”容器中。
我们现在将选择所有类名为g的div 。
Elements results = doc.select("div.g");
select() — 它用于从 HTML 或 XML 文档中选择匹配的元素。
然后,我们将遍历这些选定的div。
int c = 0;
for (Element result : results) {
// Extract the title and link of the result
String title = result.select("h3").text();
String link = result.select(".yuRUbf > a").attr("href");
String snippet = result.select(".VwiC3b").text();
System.out.println("Title: " + title);
System.out.println("Link: " + link);
System.out.println("Snippet: " + snippet);
System.out.println("Position: "+ (c+1));
System.out.println("\n");
c++;
}
您可以在g.div下找到标题、片段和链接的标签。让我们检查 HTML,以便找到它们。
从图像中,您可以说标题的标签是h3,链接是.yuRUbf > a,片段是.VwiC3b。
成功运行代码后,您的结果应如下所示:
Title: Java | Oracle
Link: https://www.java.com/
Snippet: Get Java for desktop applications. Download Java · What is Java? Uninstall help. Happy Java User. Are you a software developer looking for JDK downloads?
Position: 1
Title: Java Downloads | Oracle
Link: https://www.oracle.com/java/technologies/downloads/
Snippet: The JDK includes tools for developing and testing programs written in the Java programming language and running on the Java platform. Linux; macOS; Windows.
Position: 2
Title: Java - Wikipedia
Link: https://en.wikipedia.org/wiki/Java
Snippet: Java is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea to the north. With a population of ...
Position: 3
但是如果你用这种方法,谷歌可能会很容易地封锁你的IP。您可以通过为每个请求使用随机用户代理来在某种程度上避免这种情况。让我告诉你,你如何做到这一点:
-
初始化一组用户代理:
String userAgents[] = {"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36",
}
2.然后在0到数组长度之间选择一个随机数。
int rnd = ( int )( Math.random ()*userAgents.length);
-
然后在抓取HTML的时候传过去就可以了。
Document doc = Jsoup.connect(googleUrl).userAgent(userAgents[rnd]).get();
因此,这就是您如何准备一个基本脚本来使用 Java 抓取 Google 搜索结果的方法。
如果您正在寻找更精简且免维护的解决方案,那么您可以考虑使用我们的Google 搜索 API来抓取 Google 搜索结果。
抓取谷歌搜索结果的优势
抓取 Google 搜索结果可以为您带来很多好处:
-
SERP 监控——它可以用来监控网站在谷歌上的排名,这可以帮助你提高网站在市场上的知名度。
-
可扩展——抓取谷歌搜索结果让您可以毫无障碍地收集大量数据,这些数据可用于各种目的,如潜在客户生成、市场趋势分析等。
-
价格监控——它可以用来收集你的竞争对手或在线零售商销售的产品的价格,以保持市场竞争力。
-
Lead Generation——它可以用来收集潜在客户的电子邮件地址。
-
访问实时数据——它使您能够访问最新数据,因为 Google 搜索结果会经常更新。
-
便宜——抓取谷歌搜索结果是一个非常划算的选择,而不是使用大多数企业负担不起的官方 API。
为什么官方 Google 搜索 API 不是更好的选择?
企业不使用官方Google Search API的原因有以下几个:
-
负担不起——他们的 API 对于 1k 请求的定价为 5 美元,这对大多数企业来说是负担不起的。对于预算紧张的人来说,这是不可行的。
-
访问受限——API 仅提供有限数量的数据,这就是人们考虑市场上可用的爬虫的原因,它直接从网页中提取 HTML,让他们完全控制结果。
-
复杂设置——对于没有任何编码知识的用户来说,Google Search API 的设置非常复杂。
结论
在本教程中,我们学习了使用 Java 抓取 Google 搜索结果。谢谢阅读!
推荐书单
《项目驱动零起点学Java》
《项目驱动零起点学Java》共分 13 章,围绕 6 个项目和 258 个代码示例,分别介绍了走进Java 的世界、变量与数据类型、运算符、流程控制、方法、数组、面向对象、异常、常用类、集合、I/O流、多线程、网络编程相关内容。《项目驱动零起点学Java》总结了马士兵老师从事Java培训十余年来经受了市场检验的教研成果,通过6 个项目以及每章的示例和习题,可以帮助读者快速掌握Java 编程的语法以及算法实现。扫描每章提供的二维码可观看相应章节内容的视频讲解。
《项目驱动零起点学Java》贯穿6个完整项目,经过作者多年教学经验提炼而得,项目从小到大、从短到长,可以让读者在练习项目的过程中,快速掌握一系列知识点。
马士兵,马士兵教育创始人,毕业于清华大学,著名IT讲师,所讲课程广受欢迎,学生遍布全球大厂,擅长用简单的语言讲授复杂的问题,擅长项目驱动知识的综合学习。马士兵教育获得在线教育“名课堂”奖、“最受欢迎机构”奖。
赵珊珊,从事多年一线开发,曾为国税、地税税务系统工作。拥有7年一线教学经验,多年线上、线下教育的积累沉淀,培养学员数万名,讲解细致,脉络清晰。
精彩回顾
微信搜索关注《Java学研大本营》
访问【IT今日热榜】,发现每日技术热点