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 版权协议,转载请附上原文出处链接和本声明。