最基本的爬虫就是httpclient和jsoup两个包 一个是负责下载资源一个是负责解析数据(当然jsoup也能够下载资源 只是这样效率不高)
非常简单
就是jsoup包获取到dom对象然后对dom对象操作就行了
依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
//这个包是提供一些utils
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
代码
@Test
public void testUrl() throws Exception {
// 解析url地址 第一个参数是访问的url 第二个参数是访问时候的超时时间
// 解析url地址 第一个参数是url第二个参数是访问的超时时间
Document doc = Jsoup.parse(new URL("https://www.baidu.com"), 10000); //得到dom对象
// 使用标签选择器 获取title标签中的内容
String content = doc.getElementsByTag("title").first().text();
System.out.println(content);
}
@Test
void testData() throws Exception {
Document doc = Jsoup.parse(new File("G:\\Windows ui\\windows-10-UI-master\\index.html"), "utf8");
Element element = doc.getElementById("file-explorer");
System.out.println(" 获取到的元素id:" + element.id()); //获取元素id
System.out.println(" 获取到的元素class:" + element.className()); //获取class
System.out.println("根据属性名获取属性值:" + element.attr("class"));
System.out.println("获取元素所有属性:" + element.attributes());
}
@Test
void tetsSelect() throws Exception {
Document doc = Jsoup.parse(new File("G:\\Windows ui\\windows-10-UI-master\\index.html"), "utf8");
Elements elements = doc.select("span"); //根据标签查找
Element element = doc.select("#file-explorer").first(); //根据id查找
Element element2 = doc.select(".file-explorer").first(); //根据class查找
Element element3 = doc.select("[file]").first(); //根据属性查找
Element element4 = doc.select("[class=file]").first(); //根据属性和属性值查找
System.out.println(element.text());
for (Element element1 : elements) {
System.out.println(element1.text());
}
}
@Test
// 组合使用选择器
void SelectZUhe() throws IOException {
Document doc = Jsoup.parse(new File("G:\\Windows ui\\windows-10-UI-master\\index.html"), "utf8");
Element element = doc.select("div.icons-main").first(); //元素+class的组合 div且class为icons-main这个的
//查找父元素下面的子元素
// 这个就是查找所有.icons-main下面的所有a标签
Elements elements = doc.select(".icons-main a");
// parent > child 查找某个父元素下的直接子元素
// 比如.city > ul >li 找的是cty第一级子元素的ul 再找ul下面的li
for (Element element1:elements){
System.out.println(element.text());
}
System.out.println(element.text());
}