(官网似乎已改版,此代码没用了)
1、pom文件配置或者添加jsoup1.6.3jar包:
<dependencies> <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.6.3</version> </dependency> </dependencies>
2、 抓取长颈鹿但丁图片URL:
package com.sxit.jsoup; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.List; import org.jsoup.Connection; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; /** * 功能:抓取长颈鹿但丁图片 * 类名:jsoupPic * 作者:smile * 时间:Nov 11, 2012:2:17:57 PM */ public class jsoupPic { public static List<String> getDocument() { List<String> list = new ArrayList<String>(); try { Connection con = null; // 分页后缀 String[] a = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" }; // 遍历语录漫画下面四个项目(哲理、职场、爱情、恶搞) for (int i = 1; i <= 4; i++) { // 单个项目的第一页url String url = "http://www.danding.com.cn/pic_fl_" + i + ".html"; // 建立连接 con = Jsoup.connect(url); // 获取页面document Document doc = con.get(); // 获取末尾是jpg的img标签元素 Elements e = doc.select("img[src$=.jpg]"); // 遍历第一页jpg图片的路径 for (int j = 0; j < e.size(); j++) { Element ei = e.get(j); // System.out.println("第"+i+"页图片地址为----------->>>>> // http://www.danding.com.cn/"+ei.attr("src")); list.add("http://www.danding.com.cn/" + ei.attr("src")); } int flag = 0; while (flag == 0) { // 当前页是否存在下一页 boolean isExist = true; isExist = isExistsNextPage(doc); int k = 0; while (isExist) { // System.out.println("----------------->>>存在下一页"); // 下一页的url地址 url = "http://www.danding.com.cn/pic_fl_" + i + a[k] + ".html"; doc = traverse(url, list); isExist = isExistsNextPage(doc); k++; } flag = 1; } } } catch (IOException e) { e.printStackTrace(); } return list; } /** * 判断是否有下一页 * * @param doc * @return */ public static boolean isExistsNextPage(Document doc) { // 判断当前页是否还有下一页 Elements e = doc.select(":containsOwn(下一页)"); if (e.size() > 0) { // 有下一页 return true; } else return false; } /** * 遍历document * * @param list * @param doc * @throws IOException */ public static Document traverse(String src, List<String> list) throws IOException { Connection con = Jsoup.connect(src); Document doc = con.get(); // 获取末尾是jpg的标签元素 Elements e = doc.select("img[src$=.jpg]"); for (int j = 0; j < e.size(); j++) { Element ei = e.get(j); list.add("http://www.danding.com.cn/" + ei.attr("src")); } return doc; } }
3、批量下载到本地:
package com.sxit.jsoup; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 功能:批量下载 * 类名:ThreadPoolManage * 作者:smile * 时间:Nov 11, 2012:6:02:49 PM */ public class ThreadPoolManage { final ExecutorService exec = Executors.newFixedThreadPool(20); private String filePath; private List<String> list; // 结束的倒数锁 final CountDownLatch stop = new CountDownLatch(20); public static void main(String[] args) { new ThreadPoolManage("D://xxooThread"); } public ThreadPoolManage(String filePath) { list = jsoupPic.getDocument(); // 启20个线程跑,每个线程只跑总数的1/20,第一个线程跑1-->list.size()/20, // 第二个线程从list.size()/20+1-->2*list.size()/20,最后一个线程则跑(n-1)*list.size()/20+1-->list.size() for (int i = 1; i <= 20; i++) { this.exec.submit(new ImageThread(i, filePath, list, stop)); } try { // 等待stop变为0 stop.await(); } catch (InterruptedException e) { e.printStackTrace(); } // 等所有线程跑完最后关闭ExecutorService exec.shutdown(); } } class ImageThread implements Runnable { private String filePath; private List<String> list; private int index; private final CountDownLatch stop; public ImageThread(int index, String filePath, List<String> ilistst, CountDownLatch stop) { this.index = index; this.filePath = filePath; this.list = ilistst; this.stop = stop; } public void run() { String picUrl = ""; InputStream is = null; OutputStream os = null; URL url = null; HttpURLConnection con = null; // 判断保存路径是否存在 不存在则新建文件夹 File f = new File(filePath); File temp = null; if (!f.exists()) { f.mkdir(); } if (list != null) { // 每次需要跑的数目 int count = list.size() / 20; int start = (index - 1) * count + 1; int end = 0; if (index != 20) { end = index * count; } else { end = list.size() - 1; } for (int i = start; i <= end; i++) { picUrl = list.get(i); try { url = new URL(picUrl); con = (HttpURLConnection) url.openConnection(); // 设置连接超时 con.setConnectTimeout(100 * 1000); // 设置读取超时 con.setReadTimeout(100 * 1000); is = new BufferedInputStream(con.getInputStream()); os = new BufferedOutputStream(new FileOutputStream(new File(filePath + "/" + i + ".jpg"))); byte[] b = new byte[1024]; int length = 0; while ((length = is.read(b)) != -1) { os.write(b, 0, length); } os.flush(); System.out.println(index + "号线程----------------->>>>>>>保存完第" + i + "张"); } catch (Exception e) { System.out.println(index + "号线程跑到第" + start + "张图片+++++++++++++抛出异常,异常信息为:" + e.getMessage()); // 抛出异常捕获,继续执行 continue; } } try { if (is != null) { is.close(); } if (os != null) { os.close(); } } catch (IOException e) { e.printStackTrace(); } finally { // 当前线程完成,减1 this.stop.countDown(); } } } }
3、源码如下
相关推荐
HttpClient和Jsoup是两个Java库,分别专注于HTTP通信和HTML解析,它们常被组合使用来高效地抓取网页数据。下面我们将详细探讨这两个库及其在网页抓取中的应用。 HttpClient是由Apache软件基金会开发的一个库,主要...
在本篇中,我们将深入探讨如何使用Jsoup来抓取整个网站,并将其保存到本地,包括CSS、JavaScript、图片以及各个页面。 首先,我们需要了解Jsoup的基本用法。Jsoup通过建立一个HTTP连接到目标网站,然后解析返回的...
这是一个使用jsoup抓取网页内容的例子,适合从事手机开发的初学者学习
在"Java使用Jsoup抓取网页关键信息"这部分,我们需要了解以下几个知识点: 1. **Jsoup连接与解析网页**:使用Jsoup的`connect()`方法建立HTTP连接,然后通过`get()`或`post()`发送请求获取网页内容。获取到的HTML...
很实用的jsoup抓取网页教程,通过查看此文档,您可以解决你在抓取网页过程中出现的问题
在这个项目中,我们使用Jsoup配合Java,实现了抓取整个网站的功能,包括其中的图片、CSS样式表和JavaScript文件。通过这样的工具,我们可以对网页进行离线浏览或者备份,甚至进行数据分析。 首先,我们要理解Jsoup...
**Jsoup:网页数据抓取与JSON转换** Jsoup是一个非常强大的...通过以上步骤,你已经掌握了使用Jsoup抓取网页数据并转化为JSON格式的基本方法。在实际应用中,可以根据需求进行定制和扩展,以满足各种复杂场景的需求。
在这个"Jsoup抓取一个完整的网站.rar"压缩包中,你将找到一个示例项目,教你如何使用Jsoup配合Java来抓取一个网站的所有资源,包括图片、CSS样式表和JavaScript文件,并在本地按照原始网站的目录结构进行保存。...
以下是关于如何使用Java+Jsoup抓取网页数据的详细讲解。 首先,你需要了解HTML的基础结构,因为Jsoup的工作原理是解析HTML文档并提供类似于DOM的API来操作这些文档。HTML是由标签组成的树形结构,每个标签都有属性...
本项目将讲解如何使用Jsoup来抓取网页的关键信息,并将其存储到数据库中,同时实现通过IP地址查询天气并以邮件形式发送。 首先,Jsoup提供了简洁的API,使得解析HTML变得易如反掌。我们可以利用Jsoup的`connect()`...
同时,对于动态加载的内容,可能需要利用Selenium等工具先触发页面的JavaScript执行,然后再用Jsoup抓取。 在提供的"coolook_self"压缩包文件中,可能包含了一个自定义的Jsoup抓取示例。这可能是一个Java项目,其中...
本项目是一个基于安卓的简单利用jsoup爬取学校内网数据的教务系统app,设计的部分有:个人信息、课程表、考试时间、考勤信息、成绩查询、奖惩情况、开设课程、晚归违规等部分。主要思路就是利用jsoup爬数据把数据转化...
在本项目中,开发者使用Jsoup连接到新浪新闻网站,通过选择器抓取新闻标题、摘要等信息。这通常涉及到以下步骤: 1. 使用Jsoup的`connect()`方法建立与目标URL的连接。 2. 调用`get()`或`post()`方法发送HTTP请求并...
在本教程中,我们将重点讨论如何使用JSoup从网络上抓取并下载图片。 **步骤一:设置依赖** 在开始之前,确保你的项目已经添加了JSoup库的依赖。如果你使用Maven,可以在pom.xml文件中添加以下依赖: ```xml ...
本示例是关于如何使用Jsoup库异步抓取网络上的新闻数据,并将其填充到ListView中,模仿开源中国的资讯列表。Jsoup是一个强大的Java库,它使得解析HTML文档、提取和修改数据变得简单。 首先,我们需要了解Jsoup的...
以下是一个简单的示例,展示如何使用HttpClient获取网页内容,然后用Jsoup解析: ```java import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache....
例如,新闻聚合应用可能会使用jsoup抓取多个网站的新闻标题,社交媒体分析工具可能利用它提取用户评论,而开发者则可能用它来测试网页的HTML结构是否符合预期。 总的来说,jsoup1.8.1是一个强大的HTML解析和数据...
此外,项目中可能还包含了`jsoupDemo.docx`文件,这可能是一个详细的文档,包含了更多关于如何使用jsoup和多线程抓取新闻的步骤和示例代码。而`jsoup-1.10.2.jar`是jsoup库的版本,确保将其添加到项目的类路径中,...