Jsoup爬虫

1 Jsoup简介

        Jsoup是一个Java库,它简化了使用真实世界的HTML和XML。它提供了一个易于使用的API,用于使用DOM API方法、CSS和xpath选择器进行URL获取、数据解析、提取和操作。

        Jsoup实现了WHATWG HTML5规范,并将HTML解析为与现代浏览器相同的DOM。

  • 从URL、文件或字符串中抓取和解析HTML 
  • 使用DOM遍历或CSS选择器查找和提取数据 
  • 操作HTML元素、属性和文本 
  • 根据安全列表清除用户提交的内容,以防止XSS攻击 
  • 输出整洁的HTML

        Jsoup设计用于处理各种各样的HTML;从原始和验证,到无效标签汤;jsoup将创建一个合理的解析树。

2 爬取一个页面

        创建Maven项目,并添加Jsoup依赖,内容如下。

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

        我们先来爬取单个页面(王者荣耀官方网站-腾讯游戏),了解Jsoup的基本使用。

        获取页面内容

Document doc = null;
try {
	doc = Jsoup.connect("https://pvp.qq.com/index.shtml").get();
} catch (IOException e) {
	e.printStackTrace();
}
String content = doc.html();

        保存页面到本地

File file = new File("d:/pvp.qq.com");
if (!file.exists()) {
	file.mkdirs();
}
try {
	FileWriter writer = new FileWriter(file.getPath() + "/index.html");
	writer.write(content);
	writer.flush();
	writer.close();
} catch (IOException e) {
	e.printStackTrace();
}

        完整代码

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class PageFetch {

	public static void main(String[] args) {
		fetchPage();
	}
	/**
	 * 爬取页面并保存
	 */
	public static void fetchPage() {
		Document doc = null;
		try {
			doc = Jsoup.connect("https://pvp.qq.com/index.shtml").get();
		} catch (IOException e) {
			e.printStackTrace();
		}
		String content = doc.html();
		File file = new File("d:/pvp.qq.com");
		if (!file.exists()) {
			file.mkdirs();
		}
		try {
			FileWriter writer = new FileWriter(file.getPath() + "/index.html");
			writer.write(content);
			writer.flush();
			writer.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

3 保存图片

        在保存的首页中找到背景图的网址

//436行
background-image:url(//ossweb-img.qq.com/upload/webplat/info/yxzj/20200807/9771361431874.jpg)

        打开图片链接

URL url = new URL("https://ossweb-img.qq.com/upload/webplat/info/yxzj/20200807/9771361431874.jpg");
URLConnection conn = url.openConnection();
conn.setConnectTimeout(8 * 1000);

        获取图片对应的输入流

InputStream in = conn.getInputStream();

        保存图片到本地

byte[] buff = new byte[1024];
int len = 0;
File file = new File("d:/pvp.qq.com");
if (!file.exists()) {
	file.mkdirs();
}
FileOutputStream out = new FileOutputStream(file.getPath() + "/9771361431874.jpg");

while ((len = in.read(buff)) != -1) {
    out.write(buff, 0, len);
}
out.close();
in.close();

        完整代码

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class ImageSave {

	public static void main(String[] args) {
		saveImage();
		parsePage();
		editPage();
	}
	/**
	 * 保存图片
	 */
	public static void saveImage() {
        try {
        	//首页背景图<div class="kv-bg-container"><div class="kv-bg" style="background-image:url(...
			URL url = new URL("https://ossweb-img.qq.com/upload/webplat/info/yxzj/20200807/9771361431874.jpg");
			URLConnection conn = url.openConnection();
	        conn.setConnectTimeout(8 * 1000);
	        InputStream in = conn.getInputStream();
	        byte[] buff = new byte[1024];
	        int len = 0;
	        File file = new File("d:/pvp.qq.com");
			if (!file.exists()) {
				file.mkdirs();
			}
	        FileOutputStream out = new FileOutputStream(file.getPath() + "/9771361431874.jpg");

	        while ((len = in.read(buff)) != -1) {
	            out.write(buff, 0, len);
	        }
	        out.close();
	        in.close();
		}  catch (IOException e) {
			e.printStackTrace();
		}
	}

}

相关推荐

  1. Jsoup爬虫

    2024-04-27 06:30:02       13 阅读
  2. 【数据爬取】Jsoup爬取数据的使用

    2024-04-27 06:30:02       39 阅读
  3. 小组分享内容二:Jsoup部分(未完待续)

    2024-04-27 06:30:02       15 阅读
  4. Fastapi+Jsonp实现前后端跨域请求

    2024-04-27 06:30:02       32 阅读
  5. Web课程学习笔记--jsonp的原理与简单实现

    2024-04-27 06:30:02       41 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-27 06:30:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-27 06:30:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-27 06:30:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-27 06:30:02       18 阅读

热门阅读

  1. 快速使用之Log4j2日志框架

    2024-04-27 06:30:02       11 阅读
  2. Nginx(三): 项目实战之conf

    2024-04-27 06:30:02       12 阅读
  3. DNA序列k-mers哈希映射和相似序列查找

    2024-04-27 06:30:02       13 阅读
  4. webpack和vite

    2024-04-27 06:30:02       12 阅读
  5. vue使用外部的模板

    2024-04-27 06:30:02       14 阅读
  6. 债市的牛熊

    2024-04-27 06:30:02       12 阅读
  7. python数据分析与可视化

    2024-04-27 06:30:02       16 阅读
  8. Python笔记|不可变序列之元组

    2024-04-27 06:30:02       12 阅读