Jsoup解析获取品花社图片

emmmm,闲着没事,想起了之前一个学长做的品花社的APP,刚好之前有了解Jsoup这个Java解析HTML的库,便花了三四个小时写了这个东西,把网站上大大小小的MM的图片都一股脑的爬到本地并做了简单的分装。

项目只是学习一下Jsoup的使用和网页解析相关知识,没其他意思。

全部的图片体积大概会是4个多G,修改代码里的MAX_PAGES_NUM变量值即可。

项目地址:https://github.com/Ganart/SpiderMM36D

关于品花社是什么,自己点进去看吧:http://www.mm36d.com/

结果看图吧:

代码在这儿:

  1. import org.jsoup.Jsoup;
  2. import org.jsoup.nodes.Document;
  3. import org.jsoup.nodes.Element;
  4. import org.jsoup.select.Elements;
  5. import java.io.*;
  6. import java.net.MalformedURLException;
  7. import java.net.URL;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10. public class SpiderMM36D {
  11. static class SmallImg {
  12. String id;
  13. String url;
  14. }
  15. //截止到2018年6月21,这个值最大为102,
  16. static int MAX_APGES_NUM = 1;
  17. static String url = "http://www.mm36d.com/home/0/";
  18. //eg:http://www.mm36d.com/belle/0/0/id/2
  19. static String detailUrl = "http://www.mm36d.com/belle/0/0/";
  20. static List<String> oneMMDetailUrls = new ArrayList<>();
  21. static List<SmallImg> allImgObjects = new ArrayList<>();
  22. public static void main(String[] args) throws IOException {
  23. for (int i =1; i<=MAX_APGES_NUM;i++){
  24. gainOnePageElement(i);
  25. }
  26. System.out.println("完成图片链接解析,开始下载图片");
  27. for (int i=0;i<allImgObjects.size();i++){
  28. downloadSmallImg(allImgObjects.get(i));
  29. System.out.println("任务进度:"+((float)(i+1)/allImgObjects.size()));
  30. }
  31. }
  32. //获取小图
  33. public static void gainOnePageElement(int index){
  34. Document document = null;
  35. Elements elements = null;
  36. try {
  37. document = Jsoup.connect(url+index).get();
  38. if (document != null) {
  39. elements = document.getElementsByClass("re-size1-img");
  40. for (Element element:elements){
  41. allImgObjects.add
  42. (subMMImgUrl(element.getElementsByTag("img").toString()));
  43. }
  44. }
  45. } catch (IOException e) {
  46. e.printStackTrace();
  47. }finally {
  48. document = null;
  49. elements = null;
  50. }
  51. }
  52. //剪辑出图片的URL和id
  53. public static SmallImg subMMImgUrl(String tag){
  54. String head = "<img class=\"lazy\" data-original=\"";
  55. String withoutHead = tag.substring(head.length());
  56. String cleanUrl = withoutHead.substring(0,withoutHead.indexOf("\""));
  57. SmallImg smallImg = new SmallImg();
  58. smallImg.url = cleanUrl;
  59. String id = tag.substring(tag.indexOf("(")+1,tag.indexOf(")"));
  60. smallImg.id = id;
  61. return smallImg;
  62. }
  63. //剪辑出图片的url
  64. public static String subDetailImgUlr(String tag){
  65. String head = "<img class=\"lazy\" data-original=\"";
  66. String withoutHead = tag.substring(head.length());
  67. String cleanUrl = withoutHead.substring(0,withoutHead.indexOf("\""));
  68. return cleanUrl;
  69. }
  70. //下载小图
  71. public static void downloadSmallImg(SmallImg smallImg){
  72. if (smallImg.url.equals("")){
  73. return;
  74. }
  75. try {
  76. URL imgUrl = new URL(smallImg.url);
  77. String url = smallImg.url;
  78. BufferedInputStream bis = new BufferedInputStream
  79. (imgUrl.openConnection().getInputStream());
  80. byte[] imgArray = new byte[2048*2048];
  81. int len = 0;
  82. File file = new File("E:\\SpiderMM36D\\mmImgs\\"+smallImg.id);
  83. file.mkdir();
  84. BufferedOutputStream bos =
  85. new BufferedOutputStream
  86. (new FileOutputStream(file.getAbsolutePath()+"\\"
  87. +smallImg.id+url.substring(url.lastIndexOf("."))));
  88. while ((len=bis.read(imgArray))!=-1){
  89. bos.write(imgArray,0,len);
  90. }
  91. bos.flush();
  92. bos.close();
  93. bis.close();
  94. gainDetailPageElement(smallImg.id);
  95. oneMMDetailUrls.clear();
  96. } catch (MalformedURLException e) {
  97. e.printStackTrace();
  98. } catch (IOException e) {
  99. e.printStackTrace();
  100. }
  101. }
  102. //下载大图
  103. public static void downloadBigImg(String id,String picUrl,int i){
  104. if (picUrl.equals("")){
  105. return;
  106. }
  107. try {
  108. URL imgUrl = new URL(picUrl);
  109. BufferedInputStream bis = new BufferedInputStream
  110. (imgUrl.openConnection().getInputStream());
  111. byte[] imgArray = new byte[4096*4096];
  112. int len = 0;
  113. File file = new File("E:\\SpiderMM36D\\mmImgs\\"+id);
  114. file.mkdir();
  115. BufferedOutputStream bos =
  116. new BufferedOutputStream
  117. (new FileOutputStream
  118. (file.getAbsolutePath()+"\\"+id+"_"+i+
  119. picUrl.substring(picUrl.lastIndexOf("."))));
  120. while ((len=bis.read(imgArray))!=-1){
  121. bos.write(imgArray,0,len);
  122. }
  123. bos.flush();
  124. bos.close();
  125. bis.close();
  126. } catch (MalformedURLException e) {
  127. e.printStackTrace();
  128. } catch (IOException e) {
  129. e.printStackTrace();
  130. }
  131. }
  132. //每个MM对应的详情页
  133. public static void gainDetailPageElement(String id){
  134. Document document = null;
  135. Elements elements = null;
  136. try {
  137. document = Jsoup.connect(detailUrl+id+"/2").get();
  138. if (document != null) {
  139. elements = document.getElementsByClass("re-sizemm");
  140. for (Element element:elements){
  141. oneMMDetailUrls.add
  142. (subDetailImgUlr
  143. (element.getElementsByTag
  144. ("img").toString()));
  145. }
  146. for (int j = 0;j<oneMMDetailUrls.size();j++){
  147. downloadBigImg(id,oneMMDetailUrls.get(j),j);
  148. }
  149. }
  150. } catch (IOException e) {
  151. e.printStackTrace();
  152. }finally {
  153. document = null;
  154. elements = null;
  155. }
  156. }
  157. }

Jsoup解析获取品花社图片的更多相关文章

  1. Java解析word,获取文档中图片位置

    前言(背景介绍): Apache POI是Apache基金会下一个开源的项目,用来处理office系列的文档,能够创建和解析word.excel.ppt格式的文档. 其中对word文档的处理有两个技术 ...

  2. (java)Jsoup爬虫学习--获取网页所有的图片,链接和其他信息,并检查url和文本信息

    Jsoup爬虫学习--获取网页所有的图片,链接和其他信息,并检查url和文本信息 此例将页面图片和url全部输出,重点不太明确,可根据自己的需要输出和截取: import org.jsoup.Jsou ...

  3. [java] jsoup 解析网页获取省市区域信息

    到国家统计局抓取数据, 到该class下解析数据 /** * jsoup解析网页 * @author xwolf * @date 2016-12-13 18:11 * @since V1.0.0 */ ...

  4. Jsoup问题---获取http协议请求失败 org.jsoup.UnsupportedMimeTypeException: Unhandled content type. Must be text/*, application/xml, or application/xhtml+xml.

    Jsoup问题---获取http协议请求失败 1.问题:用Jsoup在获取一些网站的数据时,起初获取很顺利,但是在访问某浪的数据是Jsoup报错,应该是请求头里面的请求类型(ContextType)不 ...

  5. Android利用Jsoup解析html 开发网站客户端小记。

    这些天业余时间比较多,闲来无事,想起了以前看过开发任意网站客户端的一篇文章,就是利用jsoup解析网站网页,通过标签获取想要的内容.好了废话不多说,用到的工具为 jsoup-1.7.2.jar包,具体 ...

  6. jsoup解析HTML及简单实例

    jsoup 中文参考文献    http://www.open-open.com/jsoup/ 本文将利用jsoup,简单实现网络抓取的功能,并给出一个小实例,该实例效果为:获取作者本人在博客园写的所 ...

  7. jsoup解析HTML

    Connection conn = Jsoup.connect(String url); conn.data("txtBill", key);// 设置关键字查询字段 Docume ...

  8. 一步步教你为网站开发Android客户端---HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新ListView

    本文面向Android初级开发者,有一定的Java和Android知识即可. 文章覆盖知识点:HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新List ...

  9. Jsoup 解析 HTML

    Jsoup 文档 方法 要取得一个属性的值,可以使用Node.attr(String key) 方法 对于一个元素中的文本,可以使用Element.text()方法 对于要取得元素或属性中的HTML内 ...

随机推荐

  1. tinkpad e450c 进入 BIOS

    电脑开机状态下重启电脑,同时连续单击F1 听到"嘟"的一声继续按F1键即可进入BIOS管理界面. 注意:此时Fn要在锁定状态,即Fn键盘灯亮.[可用Fn+Esc切换Fn锁定和未锁定 ...

  2. java字符串对象存储机制

    String s1="abc";创建了几个String对象 ? String s2 = new String("abc");创建了几个String对象? s1= ...

  3. Powershell获取硬件信息

    1.获取系统的BIOS的信息: Get-WMIObject -Class Win32_BIOS 2.获取内存信息: Get-WMIObject -Class Win32_PhysicalMemory ...

  4. golang获取文件的md5

    直接展示代码 func md5sum(filepath string) (string, error) { f, err := os.Open(filepath) if err != nil { st ...

  5. 将一,二维数组转化为Excel格式

    首先,我们来看一下一维数组的, 其代码可以如下: import numpy as np import pandas as pd x = pd.Series([1, 3, 5, np.nan]) pri ...

  6. [darknet]查看错误结果 sight of wrong

    import os import numpy import cv2 bad_label_file = open("bad_valid.list",'r') names = [] f ...

  7. webmagic爬虫抓取工作室成员博客

    一.导入依赖 <!--webmagic依赖--> <dependency> <groupId>us.codecraft</groupId> <ar ...

  8. 软件测试1gkd

        通过老师课上的讲解以及对书本和百度百科的学习,我对软件测试有如下的理解.     软件开发的最基本要求是按时.高质量地发布软件产品,而软件测试是软件质量保证的最重要的手段之一.在整个软件生命周 ...

  9. P4389 付公主的背包

    注意 初始化的时候要这样写 for(int i=1,x;i<=n;i++){ scanf("%d",&x); v[x]++; } for(int i=1;i<= ...

  10. async/await处理异步

    async函数返回一个Promise对象,可以使用then方法添加回调函数.当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句. 看代码: 指定多少毫秒后输 ...