在采集数据时,经常会遇到一些较大的文件,如包含大量文本信息的HTML文件、大小超过10M的图片、PDF和ZIP等文件。在默认情况下,Jsoup最大只能获取1M的文件。因此,直接使用Jsoup请求包含大量文本信息的HTML文件,将导致获取的内容不全;请求大小超过1M的图片和ZIP等文件,将导致文件无法查看或解压。但在Jsoup中,可以使用maxBodySize(int bytes)设置请求文件大小限制,来避免这种问题的出现。例如,使用程序3-13下载SpringBoot.pdf(大小为9.5M) 时,Integer.MAX_VALUE为设置的请求文件大小。
//程序3-13 public class JsoupConnectBodySize { public static void main(String[] args) throws IOException { String url = "https://www.leichuangkj.com/SpringBoot.pdf"; //超时时间设置长一些,下载大文件 Connection.Response response = Jsoup.connect(url).maxBodySize(Integer.MAX_VALUE).method(Connection.Method.GET).ignoreContentType(true).execute(); //如果响应成功,则执行下面的操作 if (response.statusCode() == 200) { //响应转化成输出流 BufferedInputStream bufferedInputStream = response.bodyStream(); //保存图片 saveFile(bufferedInputStream,"/Users/steven/Documents/代码/project/spider/src/main/java/com/file/SpringBoot.pdf"); } } /** * 保存文件 * @param inputStream * @param savePath */ static void saveFile(BufferedInputStream inputStream, String savePath) throws IOException { byte[] buffer = new byte[1024]; int len = 0; //创建缓冲流 FileOutputStream fileOutStream = new FileOutputStream(new File(savePath)); BufferedOutputStream bufferedOut = new BufferedOutputStream(fileOutStream); //图片写入 while ((len = inputStream.read(buffer, 0, 1024)) != -1) { bufferedOut.write(buffer, 0, len); } //缓冲流释放与关闭 bufferedOut.flush(); bufferedOut.close(); } }