Java 爬虫

一、Jsoup

1. 爬取本地HTML文件

用Jsoup读取本地HTML文件需要File类打开相应文件并用Jsoup.parse()方法进行文件与DOM对象的转换

File desktopDirFile =FileSystemView.getFileSystemView().getHomeDirectory();
//getHomeDirectory()方法获取桌面路径,用于将生成的存储数据的Excel文件存放在桌面

File doce = new File(desktopDirFile.getAbsoluteFile()+"/xxx.html");
//getAbsoluteFile()方法获取desktopDirFile的绝对路径,doce获取放置在桌面上的文件

Document doc = Jsoup.parse(doce,"UTF-8");
//将doce文件对象转为UTF-8格式的DOM文档

2. 爬取网络HTML文件

读取网络HTML文档主要使用Jsoup.connect().get()方法

Document doc = Jsoup.connection("http://xxx.html").get();

Jsoup不能获取一些JS动态生成的数据,如果需要进行动态数据的爬取,需要使用selenium

有时下载HTML文档时会显示错误Connect timed out,说明响应时间过长,超出阈值,此时需要设置timeout

Document doc = Jsoup.connection("http://xxx.html").timeout(1000).get();
//timeout中的值设置尽可能大即可,设置为0时,永不超时

部分页面加载时会报错,若不忽略报错,难以进行后续操作

Jsoup.connect("").timeout(0).ignoreHttpErrors(true);
//设置为true时,即为忽略HTTP报错

3. DOM查询

根据id查询标签

Element element01 = doc.getElementById("some_id");

获取子标签

Elements element02 = element01.children();
//虽然children返回的是Elements,但Elements创建的对象并不能当作数组使用

访问首个子标签

Element element03 = element02.first();

访问子标签的下一个兄弟标签

Element element04 = element03.nextElementSibling();

获取标签的属性值

element.attr("Attribute_name");

获取父标签

Element father = element.parent();

根据id查询标签

Element element05 = element.getElementById("id_name");

根据class查询标签

Elements elements06 = element.getElementsByClass();
//根据class查询时,相应的对象必须是Elements,因为class不像id一样唯一

根据标签属性名称查询标签

Elements element07 = element.getElementsByAttribute("Attribute_name");

根据标签属性值查询标签

Elements element08 = element.getElementsByAttributeValue("Attribute_name", "Attribute_value");

循环遍历查询的子标签

for (Element element : elements) {}

Maven依赖导入

<dependency>
			<groupId>org.jsoup</groupId>
			<artifactId>jsoup</artifactId>
			<version>  1.8.2</version>
</dependency>

版权声明:本文为FSDAFU原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/FSDAFU/article/details/114576624