Java爬虫入门 三
一、Jsoup
简介:
jsoup是一款Java的HTML解析器,主要用来对HTML解析,可直接解析某个URL地址、HTML文本内容。
它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
功能如下:
1.从一个URL,文件或字符串中解析HTML;
2.使用DOM或CSS选择器来查找、取出数据;
3.可操作HTML元素、属性、文本( 由于Jsoup一般用于解析爬到的数据并存储, 很少用到操作)
准备开发环境,在pom.xml中导入依赖
<!--Jsoup-->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.3</version>
</dependency>
1.解析URL
// 解析url地址, 第一个参数是访问的url, 第二个参数时访问时候的超时时间
Document doc = Jsoup.parse(new URL("https://www.bilibili.com/"),5000);
2.解析文件
/ 解析文件
Document doc = Jsoup.parse(new File("C:\\Users\\mkn\\Desktop\\test.html"), "utf8");
//打印
System.out.println(doc);
3.解析字符串
// 使用工具类读取文件, 获取字符串
String content = FileUtils.readFileToString(new File("C:\\Users\\mkn\\Desktop\\test.html"), "utf8");
// 解析字符串
Document doc = Jsoup.parse(content);
//打印
System.out.println(doc);
4.处理url
//获取网页
Document document = Jsoup.connect("https://movie.douban.com/chart").get();
//System.out.println(document);
添加请求头
Map<String, String> header = new HashMap<String, String>();
header.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36");
Connection connection = Jsoup.connect("https://maoyan.com/board");
//设置请求头,欺骗服务器,这是个浏览器
Connection conn = connection.headers(header);
Document document = conn.get();
//System.out.println(document);
二、Dom方式遍历文档
Connection connection = Jsoup.connect("https://www.bilibili.com/");
Document document = connection.get();
//System.out.println(document);
// 1.根据id查询元素getElementById
Element element = document.getElementById("internationalHeader");
//System.out.println(element);
// 2.根据标签获取元素getElementsByTag
Element div = document.getElementsByTag("div").first();
//System.out.println(div);
// 3.根据class获取元素getElementsByClass
Element item = document.getElementsByClass("item").first();
//System.out.println(item);
// 4.根据属性(自定义的一个属性)获取元素getElementsByAttribute
Element a = document.getElementsByAttribute("data-loc-id").first();
//System.out.println(a);
三、Selector选择器组合使用
Connection connection = Jsoup.connect("https://www.bilibili.com/");
Document document = connection.get();
//System.out.println(document);
//元素+ID (元素#ID) 比如: div#reportFirst1
//Element element = document.select("div#reportFirst1").first();
//元素+class (元素.class) 比如: div.item
//Element element = document.select("div.item").first();
//元素+属性名 (元素[属性名]) 比如: a[data-loc-id]
//Element element = document.select("a[data-loc-id]").first();
//任意组合: 比如:span[data-id].class
//Element element = document.select("span[data-id].s_name").first();
//查找某个元素下子元素 (ancestor child) 比如:.mini-header div 查找"mini-header"下的所有li
//Elements elements = document.select(".mini-header div");
//parent > child: 查找某个父元素下的直接子元素,比如:
// .rcmd-box-wrap > div > div 查找rcmd-box-wrap第一级(直接子元素)的div,再找所有ul下的第一级div
Elements elements = document.select(".rcmd-box-wrap > div > div");
//parent > *: 查找某个父元素下所有直接子元素
//Elements elements = document.select(".rcmd-box-wrap > div > *");
//标签内属性名查找元素:
Element element = document.select("span[class=\"dra\"]").first();
//System.out.println(element);
// for (Element element : elements) {
// System.out.println(element);
// }
补充:
attr(String key) 通过关键字key获取属性
Element img_element = element.select("img[class=\"movie-hover-img\"]").first();
String imgUrl = img_element.attr("src");
Element img_element = element.select(“img[class=“movie-hover-img”]”).first();
String imgUrl = img_element.attr(“src”);
Element context_element = document.select("span[class=\"dra\"]").first();
String context = context_element.text();
本文介绍使用Java库Jsoup进行网页爬取的方法,包括解析URL、文件及字符串,利用DOM和CSS选择器抓取数据,并展示了如何设置请求头以模拟浏览器行为。

8896

被折叠的 条评论
为什么被折叠?



