使用Java进行网络数据抓取和收集

文章内容
与需要数据收集和收获工具的用户合作,并运行一个地理定位代理的生态系统,Dexodata,一家具有成本效益和可信赖的代理网站,知道Java并不是收集信息的唯一选择。当我们提供代理免费试用或提供以优惠价格购买住宅IP的机会时,PHP、Node.js、C#、Python等也被常规应用。然而,Java仍然是许多人的首选方式。今天,我们将探索它的潜力。
与地理定位代理一起使用的可用框架
当使用Java进行网页抓取和数据收集时,通常会使用这几种库:一方面,有JSoup,另一方面,有HtmlUnit。
关于JSoup,它是一个强大、有效且相对简单易用的库,能够成功处理格式不正确的HTML文档。事实上,这正是它被称为“JSoup”的原因,因为“标签汤”意味着形状不规则的东西。在所有目的上,JSoup可能是信息收集中最受欢迎和广泛使用的Java库。
至于HtmlUnit,它可以被描述为一个无头浏览器(即没有GUI的浏览器),用于由Java驱动的工具。它能够模拟和模仿浏览解决方案的典型特征,包括抓取某些页面组件、在不同点上点击等。正如其名称所暗示的,后者通常用于执行单元测试。字面上说,这是一种在测试场景中模拟浏览解决方案的方法。
此外,HtmlUnit在网页抓取和数据收集的背景下是一个合适的选择。其主要优点是人们只需一行代码即可停用JS和CSS。毫无疑问,这是一个有用的特性,因为在抓取情况下,JS和CSS通常是无关的。下面,我们评估这两者并设计抓取工具。

作为一个拥有全球地理定位代理和其他显著优势的可信代理网站,我们定期列举几种技术,帮助团队读取和修改加载的页面。当我们讨论订购代理免费试用或购买住宅IP的机会时,我们常常强调HtmlUnit的关键优势:它简化了与页面的交互。在这方面,它类似于浏览器(这并不奇怪,因为它作为一个无头浏览器运行)。这一事实意味着具有读取、填写表单、点击等功能。在我们的场景中,Dexodata利用这个库的潜力从URL中读取信息。请关注我们以了解更多。
购买住宅IP的指南前提条件
本概述期望读者在某种程度上已经掌握Java。Maven在我们的场景中用于管理包。除了Java基础知识外,读者还必须了解网页的工作原理。因此,熟悉HTML是必需的。此外,通过XPath或CSS选择器选择元素的能力也可以被称为至关重要。请记住:并非每个现有库在XPath方面都是兼容的。遗憾但真实。
来自地理定位代理提供商的CSS选择器基础知识
停下来刷新一下您对CSS选择器本质的记忆。它们包括:
- #firstname – 选择每个id匹配“firstname”的元素。
- .blue – 选择每个类包含“blue”的组件。
- p – 选择每个<p>标签。
- div#firstname – 负责选择id匹配“firstname”的div元素。
- p.link.new – 注意没有空格。它选择<p class="link new">。
- p.link .new – 它选择与“new”类相关的每个组件,该组件又可以在<p class="link">中找到。
来自可信代理网站的逐步指南
Dexodata,基于作为可信代理网站积累的丰富技术经验,准备通过Maven库有效地构建一个Java解析解决方案,与JSoup和HtmlUnit完美结合。实际上,这些库将使我们能够轻松解析和以其他方式处理Java应用程序中的HTML内容。
请按照下面提供的逐步说明设置您的项目以与地理定位代理一起使用。顺便提一下,让我们提醒您,使用Dexodata,人们不仅能够购买住宅IP,新用户还可以享受代理免费试用。让我们开始吧。
1. 初始阶段是获取一个库。
Maven可以提供帮助。只需使用可用的Java环境。在那里,生成一个Maven项目。如果由于某种原因Maven无关紧要,请访问这个网页。在那里,您可以选择其他下载。
好的,完成Maven的安装并生成一个新项目。这是安装指南供您参考。
安装后,通过在终端中执行以下命令生成一个新的Maven项目:
mvn archetype:generate -DgroupId=com.mycompany.parser -DartifactId=java-parser -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
通过这个命令,您将生成一个名为“java-parser”的新项目文件夹。这为我们提供了所有必要的Maven文件以及基本结构。初步和重要的步骤已经完成。
2. 现在,应将依赖项添加到pom.xml文件中。
这并不难。在pom.xml文件(代表“项目对象模型”)中,必须添加一个新段。它的任务是处理依赖项。随后,时机来临,提供JSoup的依赖项。
- 为此,导航到“java-parser”文件夹。
- 在那里,打开pom.xml文件。
- 将这些依赖项直接包含在<dependencies>标签内,如下所示:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.14.3</version>
</dependency>
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>2.56.0</version>
</dependency>
保存pom.xml文件。Dexodata,作为地理定位代理和编码导师的提供者,仍然与您同在。
3. 生成一个新的Java类。
在src/main/java/com/mycompany/parser文件夹中,生成一个名为“HtmlParser.java”的新Java文件。此文件将容纳主类实现,并作为未来解析器的入口点。
4. 在“HtmlParser.java”中导入必要的库。用您选择的文本编辑器或IDE打开该文件。在开始编写任何代码之前,您需要导入与HtmlUnit和JSoup相关的必要库。将以下导入语句添加到HtmlParser.java文件的开头:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
我们已经取得了显著的进展,继续与我们的可信代理网站合作。
5. 初始化一个“WebClient”对象并禁用JS和CSS。
在HtmlParser类中,您将实现创建WebClient对象、通过HtmlUnit获取HTML页面、通过JSoup解析HTML内容、提取特定数据(如标题、描述和图像)的方法,以及执行这些任务的主方法。
public class HtmlParser {
private static WebClient createWebClient() {
WebClient webClient = new WebClient();
webClient.getOptions().setJavaScriptEnabled(false);
webClient.getOptions().setCssEnabled(false);
return webClient;
}
}
6. 生成一个方法,通过HtmlUnit获取HTML页面:
public static HtmlPage fetchHtmlPage(String url) {
try (WebClient webClient = createWebClient()) {
return webClient.getPage(url);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
7. 生成一个方法,通过JSoup解析HTML内容:
public static Document parseHtmlContent(String htmlContent) {
return Jsoup.parse(htmlContent);
}
8. 继续处理解析后的HTML:
public static void extractInformation(Document document) {
// 使用JSoup方法从解析后的HTML文档中提取信息
// 例如,document.select("a[href]"), document.select("img[src$=.png]")
// 有关更多详细信息,请参阅JSoup文档:https://jsoup.org/cookbook/
}
您做得很好,还有几个步骤要完成。
9. 创建一个方法从解析后的HTML中抓取信息:
public static void main(String[] args) {
String url = "https://www.example.com";
HtmlPage htmlPage = fetchHtmlPage(url);
if (htmlPage != null) {
String htmlContent = htmlPage.asXml();
太棒了!正如人们所认识的,这并不是火箭科学。至少,当您的公司与提供全球地理定位代理的可信代理网站合作时。我们确实知道我们的行业。
前面的步骤致力于通过HtmlUnit获取网页的HTML内容,并对其进行处理和解析。现在,是时候专注于从在线商店页面提取特定数据,例如标题、描述和图像。为了使其成为现实,我们首先需要识别与这些组件相关的HTML标签和属性。用户可以使用网页浏览器的开发者工具检查和“扫描”HTML源代码并找到相关组件。
10. 一旦您识别了相关的HTML组件,您可以利用JSoup强大的选择能力来抓取数据。
例如,假设标题在一个<h1>标签中,描述在一个类为“product-description”的<div>标签内,图像在一个类为“product-image”的<img>标签内。您可以在extractInformation()方法中应用以下代码片段来获取这些数据:
public static void extractInformation(Document document) {
// 提取标题
String title = document.select("h1").text();
System.out.println("标题: " + title);
// 提取描述
String description = document.select("div.product-description").text();
System.out.println("描述: " + description);
// 提取图像URL
String imageUrl = document.select("img.product-image").attr("src");
System.out.println("图像URL: " + imageUrl);
}
11. 如果网站基于JavaScript动态加载内容,团队可能需要通过更改createWebClient()方法来启用JS支持:
private static WebClient createWebClient() {
WebClient webClient = new WebClient();
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.waitForBackgroundJavaScript(5000); // 等待JavaScript完成加载
return webClient;
}
请注意,启用JavaScript可能会增加加载时间,并可能遇到错误或与网站脚本的兼容性问题。这个问题确实值得您的关注,Dexodata,作为一家可信代理网站,知道这个艰难的事实。
12. 成功抓取在线商店的标题、描述和图像后,您可以选择将此信息存储以供进一步分析或处理。一种常见的技术是将收集到的信息保存到文件中。您可以根据需要选择各种文件格式,例如CSV、JSON或XML。在这种情况下,Dexodata将数据保存到CSV文件中。操作如下。
生成一个将提取的信息写入CSV文件的方法:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public static void writeToCSV(String title, String description, String imageUrl, String outputFilePath) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(outputFilePath, true))) {
String csvLine = String.join(",", "\"" + title.replace("\"", "\"\"") + "\"",
"\"" + description.replace("\"", "\"\"") + "\"",
"\"" + imageUrl.replace("\"", "\"\"") + "\"");
writer.write(csvLine);
writer.newLine();
} catch (IOException e) {
e.printStackTrace();
}
}
此技术将标题、描述、图像URL以及outputFilePath作为输入参数。因此,它将信息作为CSV行写入指定的文件。它还通过将文本中的双引号替换为两个双引号来处理文本中的双引号,这是CSV所要求的。
13. 更新'extractInformation()'方法以调用'writeToCSV()'方法并传入抓取的信息:
public static void extractInformation(Document document, String outputFilePath) {
// 像之前一样提取标题、描述和图像URL
// 将提取的数据写入CSV文件
writeToCSV(title, description, imageUrl, outputFilePath);
}
14. 修改主方法以包含输出文件路径并将其传递给'extractInformation()'方法:
public static void main(String[] args) {
String url = "https://www.example.com";
String outputFilePath = "output.csv";
HtmlPage htmlPage = fetchHtmlPage(url);
if (htmlPage != null) {
String htmlContent = htmlPage.asXml();
Document document = parseHtmlContent(htmlContent);
extractInformation(document, outputFilePath);
}
}
现在,当解析器运行时,它将从在线商店页面抓取标题、描述和图像URL,并将数据写入指定的CSV文件。您可以进一步自定义文件输出格式,添加标题,甚至根据您的具体要求写入其他文件格式,如JSON或XML。
通过使用在线商店产品页面的URL运行主方法来测试您的解析器。确保根据实际的真实页面结构调整JSoup选择器。您可以随时升级此解析器,以根据具体要求提取额外的信息,例如产品价格、规格或用户评论。此外,能够实现错误处理和边缘情况场景,以使您的解析器更加健壮和多功能。
作为Dexodata的地理定位代理的关键场景之一,我们知道使用这样的解析器完成事情是多么酷。

查询
Java网页抓取程序的主要目标是查询HTML文档。通常,这很耗时,但这是不可避免的。
使用JSoup,有多种方法可以获取感兴趣的组件。这些技术包括getElementByID或getElementsByTag。与DOM相关的查询流程通过它们得到了简化。
我们的场景允许使用getElementByID和getElementsByClass。然而,请注意一个重要的区别。虽然getElementById(注意,它是单数)旨在返回一个单一的Element对象,但在getElementsByClass(注意,它是复数,相对而言)中,将返回一个包含Element对象的ArrayList。
方便的是,JSoup具有一个Elements类。它的作用是扩展ArrayList<Element>。因此,代码变得更加简洁,并启用了额外的功能。
下面的代码行应用first()方法来获取ArrayList中的第一个组件。一旦完成,text()方法随后被应用于获取文本内容。
Element firstHeading = document.getElementsByClass("firstHeading").first();
System.out.println(firstHeading.text());
我们的读者可以假设这些功能足够高效。同时,它们仍然限于JSoup。在大多数情况下,必须优先选择select函数。唯一的例外是当人们确实打算向上遍历文档时。如果是您的情况,请应用诸如children()、child()和parent()等选项。只需访问这里以探索一系列可行的技术。
代码行显示了使用selectFirst()方法返回第一个匹配项:
Element firstHeading= document.selectFirst(".firstHeading");
在我们的场景中,应用了selectFirst()方法。如果必须选择多个组件,用户也可以自由地揭示select()方法的潜力。在这种方式中,CSS选择器作为参数持有。简单得像ABC。此外,Elements的实例作为ArrayList<Element>类型的扩展返回。
总结
为了生存和发展,几乎每个团队都依赖于网页抓取和数据收集(最好与一个先进和可信的代理网站联系)来评估所需的信息并超越竞争对手。熟悉网页抓取的基础知识并完全准备构建基于Java的抓取器是有价值的,因为这有助于更快和及时的数据驱动决策。同样重要的是,运行地理定位代理生态系统的可信代理网站。比如,在Dexodata,团队可以为解析器购买住宅IP,或者如果他们是平台的新用户,可以请求代理免费试用。