[Java][华为云Java编程创造营][学习笔记][第三阶段][04_Java爬虫实战][一]
【摘要】 1,爬虫编程 1.1,Java爬虫技术导读 什么是爬虫?爬虫一般指网络爬虫(Web crawler),是一种按照一定的规则,自动地爬取万维网信息的程序或者脚本,可以自动采集所有其能够访问到的页面内容,以获取相关数据。 网路爬虫合法吗?网络爬虫技术目前已经应用广泛,虽然互联网世界已经通过自身的协议建立起一定的道德规范(Robots协议),但法律部分还在建立和完善中。 从目前的情况来看,如果抓...
1,爬虫编程
1.1,Java爬虫技术导读
什么是爬虫?
- 爬虫一般指网络爬虫(Web crawler),是一种按照一定的规则,自动地爬取万维网信息的程序或者脚本,可以自动采集所有其能够访问到的页面内容,以获取相关数据。
网路爬虫合法吗?
-
网络爬虫技术目前已经应用广泛,虽然互联网世界已经通过自身的协议建立起一定的道德规范(Robots协议),但法律部分还在建立和完善中。 从目前的情况来看,如果抓取的数据属于个人使用或科研范畴,基本不存在问题;而如果数据属于商业盈利范畴,就要就事论事,有可能属于违法行为,也有可能不违法。
-
Robots协议(爬虫协议)的全称是"网络爬虫排除标准"(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。该协议是国际互联网界通行的道德规范,虽然没有写入法律,但是每一个爬虫都应该遵守这项协议。
网络爬虫的约束
- 除了上述Robots协议之外,我们使用网络爬虫时还要对自己进行约束:
- 过于快速或者频密的网络爬虫都会对服务器产生巨大的压力,网站可能封锁你的ip,甚至采取进一步的法律行为。因此,你需要约束自己的网络爬虫行为, 将请求的速度限定在一个合理的范围之内。
- 在爬取网站的时候需要限制自己的爬虫,遵守Robots协议和约束网络爬虫程序的速度;在使用数据的时候必须遵守网站的知识产权。如果违反了这些规定, 很可能会吃官司,并且败诉的概率相当高。
- 提示:本课程中的爬虫程序仅用于学习、研究用途,请不要用于非法用途。任何由此引发的法律纠纷,请自行负责。
1.2,爬虫技术简介
爬虫技术简介(1)
- 随着网络的迅猛发展,万维网成为大量信息的载体,而信息的采集是一项重要的工作,如果单纯靠人力进行信息采集,不仅低效繁琐,搜索的成本也会提高。那么如何有效地提取并利用这些信息成为一个巨大的挑战。
- 爬虫一般指网络爬虫(Web crawler),是一种按照一定的规则,自动地爬取万维网信息的程序或者脚本,可以自动采集所有能够访问到的页面内容,以获取相关数据。
爬虫技术简介(2)
- 从功能上讲,爬虫一般分为数据采集,处理,存储三个部分。
- 爬虫能解决什么问题?
- 1,大数据时代,可以让我们获取更多的数据源
- 2,实现私人的搜索引擎
- 3,优化搜索引擎
1.3,Jsoup爬虫技术栈
Jsoup爬虫技术栈(1)
- Jsoup 是一个Java HTML Parser,能够从URL,文件或字符串中解析HTML。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
- Jsoup的主要功能:
- 1,从URL,文件或字符串中抓取和解析HTML
- 2,使用CSS选择器或者DOM遍历查找和提取数据
- 3,可操作HTML元素,属性和文本
- 注意:Jsoup是基于MIT协议发布的,可以放心使用于商业项目
Jsoup准备工作
-
1,新建
maven
工程 -
2,在浏览器打开 maven仓库
-
3,搜索
jsoup
-
4,
-
5,
-
6,
-
7,将
jsoup
的坐标输入pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>huaweijava</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.14.3</version>
</dependency>
</dependencies>
</project>
Jsoup爬虫技术栈(2)
- Jsoup解析URL
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class Demo1
{
public static void main(String[] args) throws Exception
{
Document document = Jsoup.connect("https://www.huaweicloud.com/").get();
//获取标题内容
String title = document.title();
System.out.println(title);//华为云-提供云计算服务 +智能,见未来-华为云
}
}
Jsoup.connect(String url)
方法返回了一个org.jsoup.Connection
对象。在Connection
对象中,可以使用get()
或者post()
方法来执行请求,并返回一个org.jsoup.nodes.Document
对象,可以通过解析Document
对象来获取我们想要的元素。
Jsoup爬虫技术栈(3)
- Jsoup解析字符串
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class Demo2
{
public static void main(String[] args) throws Exception
{
String html = "<html>" +
"<head>" +
"<title>" +
"Firstparse" +
"</title>" +
"</head>" +
"<body>" +
"<p>" +
"Parsed HTML into a doc." +
"</p>" +
"</body>" +
"</html>";
Document document = Jsoup.parse(html);
//获取标题内容
System.out.println(document.title());//Firstparse
}
}
Jsoup.parse(String str)
方法可以解析HTML字符串,并返回一个Document
对象,可以通过解析Document
对象来获取我们想要的元素。
Jsoup爬虫技术栈(4)
Jsoup
解析文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Huawei</title>
</head>
<body>
</body>
</html>
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.File;
public class Demo3
{
public static void main(String[] args) throws Exception
{
Document document = Jsoup.parse(new File("src\\main\\java\\com\\huawei\\demo3\\jsoup.html"), "UTF-8");
//获取标题内容
String title = document.title();
System.out.println(title);//Huawei
}
}
Jsoup.parse(File file,String charSetName)
方法可以加载并解析一个HTML文件,并返回一个Document
对象,可以通过解析Document
对象来获取我们想要的元素。
Jsoup爬虫技术栈(5)
- 使用选择器语法查找元素
- Jsoup元素支持类似于CSS(或jQuery)的选择器语法,来实现非常强大和灵活的查找功能。Jsoup提供了
select(Stirng selector)
方法,可以实现指定元素的过滤,或链式选择访问,该方法将返回一个Elements
集合对象,并提供一组方法来抽取和处理结果。
- Jsoup元素支持类似于CSS(或jQuery)的选择器语法,来实现非常强大和灵活的查找功能。Jsoup提供了
- selector选择器概述:
tagname
:按照标签查找元素#id
:通过id查找元素.class
:通过类名查找元素[attribute]
:利用属性名查找元素[attr=value]
:利用属性值查找元素
Jsoup爬虫技术栈(6)
selector
选择器使用案例:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import java.io.File;
public class Demo4
{
public void testSelector() throws Exception
{
//解析文件
Document document = Jsoup.parse(new File("src\\main\\java\\com\\huawei\\demo3\\jsoup.html"), "UTF-8");
//1,通过标签查找元素,比如:span
Element tagElement = document.select("span").first();
//2,通过id查找元素,比如:Huaweicloud_school
Element idElement = document.select("#Huaweicloud_school").first();
//3,通过class查找元素,比如class_a
Element classElement = document.select(".class_a").first();
//4,通过属性查找元素,比如[myAttr]
Element attrElement = document.select("[myAttr]").first();
//5,通过属性值查找元素,比如[class=course]
Element varElement = document.select("[class=course]").first();
System.out.println(varElement.text());
}
}
Jsoup爬虫技术栈(7)
selector
选择器的组合使用:el#id
:元素+idel.class
:元素+classel[attr]
:元素+属性名任意组合
:例如 元素[属性名].classancestor chile
:查找某个元素下子元素parent > chile
:查找某个父元素下的直接子元素
Jsoup爬虫技术栈(8)
Elements
提供了一系列类似于DOM的方法来提取和操作他们的数据:id()
:从元素中获取idclassName()
:从元素中获取classNameattr(String str)
:从元素中获取属性str的值attributes()
:从元素中获取所有属性attributestext()
:从元素中获取文本内容
Jsoup爬虫技术栈(9)
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import java.io.File;
import java.util.Set;
public class Demo5
{
public void testData() throws Exception
{
//解析文件
Document document = Jsoup.parse(new File("src\\main\\java\\com\\huawei\\demo3\\jsoup.html"), "UTF-8");
//根据id获取元素
Element element = document.getElementById("test");
String str = "";
//从元素中获取数据
//1,从元素中获取id的值
str = element.id();
//2,从元素中获取class的值
str = element.className();
Set<String> classSet = element.classNames();
//3,从元素中获取属性的值attr
str = element.attr("class");
//4,从元素中获取文本的内容
str = element.text();
System.out.println("获取到的数据是:" + str);
}
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)