今天学习 Jsoup
首先引入相关依赖
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.12.1</version>
</dependency>
然后明确我们今天要爬取的目标
获取作品分类和相关衔接
第一步、
首先按F12 找到对应的html文件
点击elements这个选项栏, 就找到了这个页面的HTML ,
然后通过
点击页面上的组件, 可以直接定位到相应代码段。
在这里插入图片描述
通过代码段,我们发现,我们要查找的内容最外层是div 标签,
倒数第二层是dl标签, 通过这个标签, 将这些文字排列。
最后我们的目标代码段
显然我们可以看到,
我们要抓取的就是 <a> 标签的属性 ,
href (链接) , title (小说类型) 。
然后我们获取CSS选择器解析的写法
写法如下:
#classify-list > dl > dd:nth-child(1) > a
通过实现我们发现, 用浏览器直接生成会抓取指定的组件。
在这个例子中就是特定的 <a>标签。
所以如果我们用这句话来选择, 只会选择到其中一条,
但是结合该语句我们写出下面的选择表达式 :
#classify-list > dl > dd > a
我们就能获取到所有的<a>标签, 而且是一个个元素排列的, 这样
我们就能通过for遍历所有的<a> 标签
然后获取我们要的内容了 。
运行成功的代码如下:
package com.example.demo;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
public class jsouptest {
public static void main(String args[])
{
try {
Document document = Jsoup.connect("https://www.qidian.com/").get();
Elements elements=document.select("#classify-list > dl > dd > a");
System.out.println(elements);
//#classify-list > dl > dd:nth-child(2) > a
*[@id="classify-list"]/dl/dd[2]/a
for(Element element : elements)
{
String lianjie=element.attr("href");
String title=element.attr("title");
System.out.println(title + "的链接为 " + lianjie);
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
结果如下图所示 :
为了更加进一步学习jsoup, 我们可以进入官网学习 :
https://try.jsoup.org/~LGB7rk_atM2roavV0d-czMt3J_g
那么到这里今天的实验就结束了 。