java抓取网页数据(Web爬虫是什么?Web抓取非常有用的两者区别!)
优采云 发布时间: 2022-02-11 09:38java抓取网页数据(Web爬虫是什么?Web抓取非常有用的两者区别!)
网页抓取对于采集用于各种目的的信息非常有用,例如数据分析、统计、提供第三方信息以及为深度神经网络和深度学习提供数据。
什么是网页抓取?
有一种非常普遍的误解,即人们似乎将网络抓取和网络抓取视为同一件事。所以让我们先说清楚。
两者有非常显着的区别:
网页抓取是指搜索或“抓取”网页以获取任意信息的过程。通常是 Google、Yahoo 或 Bing 等搜索引擎的一项功能,用于向我们显示搜索结果。
网页抓取是指利用特定网站中专门定制的自动化软件手机信息的过程。
创建一个小组供大家学习和聊天
如果你对学习JAVA有任何疑惑,或者有话要说,可以一起交流学习,一起进步。
也希望大家能坚持学习JAVA
JAVA爱好群,
如果你想学好JAVA,最好加入一个组织,这样大家学习更方便,也可以一起交流分享信息,为你推荐一个学习组织:快乐学习JAVA组织,可以点组织这个词,可以直接
注意!
虽然网络抓取本身是从 网站 获取信息的合法方式,但如果使用不当,则可能成为非法。
有几种情况需要特别注意:
网页抓取可以被认为是拒绝服务攻击:发送过多的请求来获取数据会给服务器带来太大的压力,限制了普通用户访问的能力网站。
无视版权法和服务条款:因为很多人、组织和公司开发网络抓取软件来采集信息,很多网站如亚马逊、eBay、LinkedIn、Instagram、Facebook等都没有什么麻烦。因此,绝大多数网站的人都禁止使用爬虫软件来获取他们的数据,你必须获得书面许可才能采集数据。
网页抓取可能会被恶意使用:抓取软件的行为很像机器人,一些框架甚至提供了自动填写和提交表单的工具。因此它可以用作自动垃圾邮件工具,甚至可以攻击网站。这是 CAPTCHA 存在的原因之一。
如果您想开发一款功能强大的抓取软件,请务必考虑以上几点并遵守法律法规。
网页抓取框架
与许多现代技术一样,有多种框架可供选择以从 网站 中提取信息。最流行的是 JSoup、HTMLUnit 和 Selenium WebDriver。我们的文章 文章 讨论了 JSoup。
JSoup
JSoup 是一个提供强大数据提取 API 的开源项目。它可用于从给定的 URL、文件或字符串解析 HTML。它还可以操作 HTML 元素和属性。
使用 JSoup 解析字符串
解析字符串是使用 JSoup 最简单的方法。
公共类 JSoupExample {
public static void main(String[] args) {
String html = "Website title<p>Sample paragraph number 1
Sample paragraph number 2";
Document doc = Jsoup.parse(html);
System.out.println(doc.title());
Elements paragraphs = doc.getElementsByTag("p");
for (Element paragraph : paragraphs) {
System.out.println(paragraph.text());
}
}</p>
这段代码非常直观。调用 parse() 方法解析输入的 HTML 并将其转换为 Document 对象。可以通过调用此对象上的方法来操作和提取数据。
在上面的例子中,我们首先输出页面的标题。然后,我们得到所有带有标签“p”的元素。然后我们依次输出每个段落的文字。
运行这段代码,我们可以得到如下输出:
网站标题
示例段落编号 1
示例段落编号 2
使用JSoup解析网址
解析网址和解析字符串有点不同,但基本原理是一样的:
公共类 JSoupExample {
public static void main(String[] args) throws IOException {
Document doc = Jsoup.connect("https://www.wikipedia.org").get();
Elements titles = doc.getElementsByClass("other-project");
for (Element title : titles) {
System.out.println(title.text());
}
}
}
要从 URL 中抓取数据,您需要调用 connect() 方法,将 URL 作为参数提供。然后使用 get() 从连接中获取 HTML。这个例子的输出是:
Commons 免费使用的照片等
维基导游免费旅行指南
维基词典
Wikibooks 免费教科书
维基新闻免费新闻来源
维基数据免费知识库
维基学院免费课程资料
维基语录免费引用纲要
MediaWiki 免费且开放的 wiki 应用程序
维基资源免费图书馆
维基物种免费物种目录
元维基社区协调和文档
如你所见,这个程序抓取了类 other-project 的所有元素。
这种方法最常见,我们来看一些其他的通过URL抓取的例子。
从指定的 URL 获取所有链接
public void allLinksInUrl() 抛出 IOException {
Document doc = Jsoup.connect("https://www.wikipedia.org").get();
Elements links = doc.select("a[href]");
for (Element link : links) {
System.out.println("\nlink : " + link.attr("href"));
System.out.println("text : " + link.text());
}
}
结果是一长串:
链接:///
文本:英文 5 678 000 多篇文章
链接:///
文本:日语 1 112 000+ 注释
链接:///
文本:Español 1 430 000+ 文章
链接:///
文本:Deutsch 2 197 000+ Artikel
链接:///
文本:Русский 1 482 000+ статей
链接:///
文本:意大利语 1 447 000+ 语音
链接:///
文本:法语 2 000 000 多篇文章
链接:///
文本:中文 1 013 000+ 个条目
文本:维基词典免费词典
链接:///
文本:维基教科书免费教科书
链接:///
文本:维基新闻免费新闻来源
链接:///
文本:维基数据免费知识库
链接:///
文本:维基学院免费课程资料
链接:///
文本:维基语录免费引用纲要
链接:///
文本:MediaWiki 免费且开放的 wiki 应用程序
链接:///
文本:维基资源免费图书馆
链接:///
文本:维基物种免费物种目录
链接:///
文本:元维基社区协调和文档
链接:
文本:知识共享署名-相同方式共享许可
链接:///wiki/Terms_of_Use
文本:使用条款
链接:///wiki/Privacy_policy
文本:隐私政策
同样,你也可以获取图片的数量、元信息、表单参数等你能想到的一切,所以经常被用来获取统计数据。
使用 JSoup 解析文件
public void parseFile() 抛出 URISyntaxException, IOException {
URL path = ClassLoader.getSystemResource("page.html");
File inputFile = new File(path.toURI());
Document document = Jsoup.parse(inputFile, "UTF-8");
System.out.println(document.title());
//parse document in any way
}
如果你正在解析文件,你不需要向网站发送请求,所以不用担心在服务器上运行太多程序。虽然这种方法有很多局限性,而且数据是静态的,因此不适用于许多任务,但它提供了一种更合法、更无害的数据分析方式。
可以按照前面描述的任何方式解析生成的文档。
设置属性值
除了读取字符串、URL、文件和获取数据之外,我们还可以修改数据和输入表单。
例如访问亚马逊时,点击左上角的网站标志返回网站首页。
如果你想改变这种行为,你可以这样做:
public void setAttributes() 抛出 IOException {
Document doc = Jsoup.connect("https://www.amazon.com").get();
Element element = doc.getElementById("nav-logo");
System.out.println("Element: " + element.outerHtml());
element.children().attr("href", "notamazon.org");
System.out.println("Element with set attribute: " + element.outerHtml());
}
得到网站标志的id后,我们就可以查看它的HTML了。您还可以访问其子元素并更改其属性。
元素:
亚马逊
试试 Prime
设置属性的元素:
亚马逊
试试 Prime
默认情况下,两个子元素都指向它们各自的链接。将属性更改为其他值后,可以看到子元素的href属性更新了。
添加或删除类
除了设置属性值,我们还可以修改前面的例子,在元素中添加或删除类:
public void changePage() 抛出 IOException {
Document doc = Jsoup.connect("https://www.amazon.com").get();
Element element = doc.getElementById("nav-logo");
System.out.println("Original Element: " + element.outerHtml());
element.children().attr("href", "notamazon.org");
System.out.println("Element with set attribute: " + element.outerHtml());
element.addClass("someClass");
System.out.println("Element with added class: " + element.outerHtml());
element.removeClass("someClass");
System.out.println("Element with removed class: " + element.outerHtml());
}
运行代码会给我们以下信息:
原创元素:
亚马逊
试试 Prime
设置属性的元素:
亚马逊
试试 Prime
添加类的元素:
亚马逊
试试 Prime
移除类的元素:
亚马逊
试试 Prime
你可以将新的代码以.html的形式保存到本机,或者通过HTTP请求发送给Daou网站,但是注意后者可能是非法的。
结论
网页抓取在很多情况下都有用,但一定要*敏*感*词*使用。本文介绍了 JSoup,一种流行的网页抓取框架,以及使用它解析信息的几种方法。