Java开源技术交流社区 - 波波蛋

?找回密码
?立即注册
搜索
总共13条微博

动态微博

查看: 2323|回复: 2
打印 上一主题 下一主题

[Java] 写最简陋难看的爬虫,下载最强大最给力的福利!!!

[复制链接]

7

主题

9

亚博体育竞技平台

34

积分

新手上路

Rank: 1

积分
34
跳转到指定楼层
楼主
发表于 2015-1-11 22:23:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
粗糙简陋的爬虫,希望大家不要嫌弃啦~~
没有解决对ajax异步加载页面的问题,所以不能拿到更加高清的福利。
尽管如此,没有高清,但绝对无码哈!!!而且保证数量!!!


执行爬虫
  1. package com.myself.unameproject.net;

  2. import java.util.ArrayList;
  3. import java.util.Collections;
  4. import java.util.List;
  5. import java.util.concurrent.ExecutorService;
  6. import java.util.concurrent.Executors;

  7. public class MyRobot {
  8. ? ???
  9. ? ? private List hrefs? ?= Collections.synchronizedList(new ArrayList());
  10. ? ? private List visited = Collections.synchronizedList(new ArrayList());
  11. ? ? private List images??= Collections.synchronizedList(new ArrayList());
  12. ? ???
  13. ? ? public MyRobot(String href) {
  14. ? ?? ???hrefs.add(href);
  15. ? ? }
  16. ? ???
  17. ? ? public void run() throws InterruptedException {
  18. ? ?? ???ExecutorService pool = Executors.newFixedThreadPool(2);
  19. ? ?? ???pool.execute(new SearchHreg(hrefs, visited, images));
  20. ? ?? ???Thread.sleep(5000);
  21. ? ?? ???pool.execute(new SearchHreg(hrefs, visited, images));
  22. ? ?? ???//pool.execute(new DownloadImage(images));
  23. ? ?? ???pool.shutdown();
  24. ? ? }
  25. ? ???
  26. ? ? public static void main(String[] args) throws InterruptedException {
  27. ? ?? ???MyRobot robot = new MyRobot("http://sexy.faceks.com/post/2c9c66_145b18c");
  28. ? ?? ???robot.run();
  29. ? ? }

  30. }
复制代码


提取链接啦~~~~~
  1. package com.myself.unameproject.net;

  2. import java.io.BufferedReader;
  3. import java.io.FileNotFoundException;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.net.HttpURLConnection;
  7. import java.net.MalformedURLException;
  8. import java.net.URL;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. import java.util.regex.Matcher;
  12. import java.util.regex.Pattern;

  13. /**
  14. * 寻找href链接
  15. * @author hongframe
  16. *
  17. */
  18. public class SearchHreg implements Runnable {
  19. ? ???
  20. ? ? //当前解析的url
  21. ? ? private URL url = null;
  22. ? ? private String href = null;
  23. ? ? //当前url解析的页面内容
  24. ? ? private StringBuffer pageContent = null;
  25. ? ? //读取页面内容
  26. ? ? private BufferedReader reader? ? = null;
  27. ? ? //当前url的Connection
  28. ? ? private HttpURLConnection httpURLConnection = null;
  29. ? ? //未解析url队列
  30. ? ? private List hrefs? ???= null;
  31. ? ? //已解析url队列
  32. ? ? private List visited = null;
  33. ? ? //图片链接队列
  34. ? ? private List images??= null;
  35. ? ? //已解析链接数
  36. ? ? private int analyze = 0;
  37. ? ? //
  38. ? ? private int count? ?= 0;
  39. ? ? public static final String HREF_REGEX??= "\\s*(?i)href\\s*=\"\\s*(\"([^\"]*\")|'[^']*'|([^'\">\\s]+))\"";
  40. ? ? public static final String IMAGE_REGEX = "]*?\\ssrc=['\"]?(.*?)['\"].*?>";
  41. ? ???
  42. ? ? public SearchHreg(String href) {
  43. ? ?? ???this.href = href;
  44. ? ? }
  45. ? ???
  46. ? ? public SearchHreg(List hrefs, List visited, List images) {
  47. ? ?? ???this.hrefs = hrefs;
  48. ? ?? ???this.visited = visited;
  49. ? ?? ???this.images = images;
  50. ? ? }

  51. ? ? @Override
  52. ? ? public void run() {
  53. ? ?? ???String content = null;
  54. ? ?? ???//未解析队列非空时,继续解析
  55. ? ?? ???while(!hrefs.isEmpty()) {
  56. ? ?? ?? ?? ?try {
  57. ? ?? ?? ?? ?? ? //把当前要解析的url字符串从hrefs移到visited
  58. ? ?? ?? ?? ?? ? visited.add(hrefs.remove(0));
  59. ? ?? ?? ?? ?? ? //访问visited最后一个元素
  60. ? ?? ?? ?? ?? ? url = new URL(visited.get(visited.size()-1));
  61. ? ?? ?? ?? ?? ? System.out.println("已解析第 " + ++analyze + " 个连接。。。");
  62. ? ?? ?? ?? ?? ? httpURLConnection = (HttpURLConnection)url.openConnection();
  63. ? ?? ?? ?? ?? ? httpURLConnection.setConnectTimeout(1500);
  64. ? ?? ?? ?? ?? ? httpURLConnection.setReadTimeout(3000);
  65. ? ?? ?? ?? ?? ? //打开字符输入流
  66. ? ?? ?? ?? ?? ? reader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()));
  67. ? ?? ?? ?? ?? ? //每行字符串
  68. ? ?? ?? ?? ?? ? content = null;
  69. ? ?? ?? ?? ?? ? pageContent = new StringBuffer();
  70. ? ?? ?? ?? ?? ? //开始读取页面内容
  71. ? ?? ?? ?? ?? ? while((content = reader.readLine()) != null) {
  72. ? ?? ?? ?? ?? ?? ???pageContent.append(content);
  73. ? ?? ?? ?? ?? ? }
  74. ? ?? ?? ?? ?? ? //关闭字符输入流
  75. ? ?? ?? ?? ?? ? reader.close();
  76. ? ?? ?? ?? ?? ? //arr1为该页面所有href,arr2为该页面的所有的src
  77. ? ?? ?? ?? ?? ? String[] arr1 = getlinks(pageContent.toString(), HREF_REGEX);
  78. ? ?? ?? ?? ?? ? String[] arr2 = getlinks(pageContent.toString(), IMAGE_REGEX);
  79. ? ?? ?? ?? ?? ? for(String str : arr1) {
  80. ? ?? ?? ?? ?? ?? ???//获取http协议与https协议的url,则存放不存在的url
  81. ? ?? ?? ?? ?? ?? ???if((str.startsWith("http") || str.startsWith("https")) && (visited.indexOf(str) == -1) && (hrefs.indexOf(str) == -1)) {
  82. ? ?? ?? ?? ?? ?? ?? ?? ?hrefs.add(str);
  83. ? ?? ?? ?? ?? ?? ?? ?? ?System.out.println(++count + "??>>> " + str);
  84. ? ?? ?? ?? ?? ?? ???}
  85. ? ?? ?? ?? ?? ? }
  86. ? ?? ?? ?? ?? ? for(String str : arr2) {
  87. ? ?? ?? ?? ?? ?? ???if(images.indexOf(str) == -1) {
  88. ? ?? ?? ?? ?? ?? ?? ?? ?images.add(str);
  89. ? ?? ?? ?? ?? ?? ?? ?? ?//System.out.println(count + " IMAGE >>> " + str);
  90. ? ?? ?? ?? ?? ?? ???}
  91. ? ?? ?? ?? ?? ? }
  92. ? ?? ?? ?? ?? ? new Thread(new DownloadImage(images)).start();
  93. ? ?? ?? ?? ?} catch (MalformedURLException e) {
  94. ? ?? ?? ?? ?? ? e.printStackTrace();
  95. ? ?? ?? ?? ?} catch (FileNotFoundException e) {
  96. ? ?? ?? ?? ?? ???
  97. ? ?? ?? ?? ?} catch (IOException e) {
  98. ? ?? ?? ?? ?? ? e.printStackTrace();
  99. ? ?? ?? ?? ?} finally {
  100. ? ?? ?? ?? ?? ? next();
  101. ? ?? ?? ?? ?}
  102. ? ?? ???}
  103. ? ? }
  104. ? ???
  105. ? ? public void next() {
  106. ? ?? ???try {
  107. ? ?? ?? ?? ?pageContent = null;
  108. ? ?? ?? ?? ?url = null;
  109. ? ?? ?? ?? ?httpURLConnection = null;
  110. ? ?? ?? ?? ?if(reader != null) {
  111. ? ?? ?? ?? ?? ? reader.close();
  112. ? ?? ?? ?? ?}
  113. ? ?? ?? ?? ?reader = null;
  114. ? ?? ?? ?? ?System.gc();
  115. ? ?? ???} catch (IOException e) {
  116. ? ?? ?? ?? ?e.printStackTrace();
  117. ? ?? ???}
  118. ? ? }
  119. ? ???
  120. ? ? public String[] getlinks(String pageContent, String regex) {
  121. ? ?? ???Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
  122. ? ?? ???Matcher matcher = pattern.matcher(pageContent);
  123. ? ?? ???List strs = new ArrayList();
  124. ? ?? ???while(matcher.find()) {
  125. ? ?? ?? ?? ?strs.add(matcher.group(1));
  126. ? ?? ???}
  127. ? ?? ???String[] strings = new String[strs.size()];
  128. ? ?? ???return strs.toArray(strings);
  129. ? ? }

  130. }
复制代码


下载福利啦!!!!
  1. package com.myself.unameproject.net;

  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.net.MalformedURLException;
  9. import java.net.URL;
  10. import java.text.SimpleDateFormat;
  11. import java.util.Date;
  12. import java.util.List;

  13. public class DownloadImage implements Runnable {
  14. ? ???
  15. ? ? public static String IMAGE_PATH = "D:\\IMAGE";
  16. ? ???
  17. ? ? private int??imageCount? ???= 0;
  18. ? ? private File image? ?? ?? ? = null;
  19. ? ? private URL??imageUrl? ?? ? = null;
  20. ? ? private List images = null;
  21. ? ? private BufferedInputStream??inputStream??= null;
  22. ? ? private BufferedOutputStream outputStream = null;
  23. ? ???
  24. ? ? public DownloadImage(List image) {
  25. ? ?? ???this.images = image;
  26. ? ? }
  27. ? ???

  28. ? ? @Override
  29. ? ? public void run() {
  30. ? ?? ???// TODO Auto-generated method stub
  31. ? ?? ???SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd_HHmmssSSS");
  32. ? ?? ???try {
  33. ? ?? ?? ?? ?
  34. ? ?? ?? ?? ?while(!images.isEmpty()) {
  35. ? ?? ?? ?? ?? ? imageUrl = new URL(images.remove(0));
  36. ? ?? ?? ?? ?? ? imageUrl.openConnection().setConnectTimeout(1500);
  37. ? ?? ?? ?? ?? ? imageUrl.openConnection().setReadTimeout(10000);
  38. ? ?? ?? ?? ?? ? inputStream = new BufferedInputStream(imageUrl.openStream());
  39. ? ?? ?? ?? ?? ? image = new File(IMAGE_PATH + "\\" + dateFormat.format(new Date()) + "." + imageUrl.toString().substring(imageUrl.toString().lastIndexOf(".") + 1));
  40. ? ?? ?? ?? ?? ? outputStream = new BufferedOutputStream(new FileOutputStream(image));
  41. ? ?? ?? ?? ?? ? byte[] buf = new byte[2048];??
  42. ? ?? ?? ?? ?? ? int length = inputStream.read(buf);??
  43. ? ?? ?? ?? ?? ? while (length != -1) {??
  44. ? ?? ?? ?? ?? ?? ???outputStream.write(buf, 0, length);??
  45. ? ?? ?? ?? ?? ?? ???length = inputStream.read(buf);??
  46. ? ?? ?? ?? ?? ? }
  47. ? ?? ?? ?? ?? ? next();
  48. ? ?? ?? ?? ?}
  49. ? ?? ?? ?? ?//wait();
  50. ? ?? ???} catch (MalformedURLException e) {
  51. ? ?? ?? ?? ?e.printStackTrace();
  52. ? ?? ???} catch (FileNotFoundException e) {
  53. ? ?? ?? ?? ?e.printStackTrace();
  54. ? ?? ???} catch (IOException e) {
  55. ? ?? ?? ?? ?e.printStackTrace();
  56. ? ?? ???} finally {
  57. ? ?? ?? ?? ?try {
  58. ? ?? ?? ?? ?? ? next();
  59. ? ?? ?? ?? ?} catch (IOException e) {
  60. ? ?? ?? ?? ?? ? e.printStackTrace();
  61. ? ?? ?? ?? ?}
  62. ? ?? ???}
  63. ? ? }
  64. ? ???
  65. ? ? public void next() throws IOException {
  66. ? ?? ???if (inputStream != null) {
  67. ? ?? ?? ?? ?inputStream.close();
  68. ? ?? ???}
  69. ? ?? ???if (outputStream != null) {
  70. ? ?? ?? ?? ?outputStream.close();
  71. ? ?? ???}
  72. ? ?? ???image??= null;
  73. ? ?? ???//images = null;
  74. ? ?? ???imageUrl? ???= null;
  75. ? ?? ???inputStream??= null;
  76. ? ?? ???outputStream = null;
  77. ? ?? ???System.gc();
  78. ? ?? ???System.out.println("DownloadImage >>> " + ++imageCount);
  79. ? ? }

  80. }
复制代码


0

主题

1

亚博体育竞技平台

9

积分

新手上路

Rank: 1

积分
9
沙发
发表于 2015-1-11 22:27:23 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

2

主题

3

亚博体育竞技平台

17

积分

新手上路

Rank: 1

积分
17
板凳
发表于 2015-1-11 22:27:25 | 只看该作者
哈哈哈哈哈
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|波波蛋 ( 鄂ICP备13005216号-4 )

GMT+8, 2019-9-3 07:35 , Processed in 0.171600 second(s), 39 queries , Gzip On.

Powered by 波波蛋

? 2001-2015 波波蛋

快速回复 返回顶部 返回列表