简介:不是很智能的爬虫,效率慢,仅用作自娱自乐,需要观察目标网站的页面然后修改相关正则去获取自己想要的数据

环境:需要Http-client相关jar包,如下,可以去我的下载链接下载:

https://download.csdn.net/download/the_fool_/10046597

重新整理jar包:

  1. <dependency>
  2. <groupId>org.apache.httpcomponents</groupId>
  3. <artifactId>httpclient</artifactId>
  4. <version>4.5</version>
  5. </dependency>

工具类1,获取某个页面HTML代码

  1. package com.zzt.spider;
  2. import java.io.IOException;
  3. import java.util.Random;
  4. import org.apache.http.HttpEntity;
  5. import org.apache.http.HttpResponse;
  6. import org.apache.http.client.ClientProtocolException;
  7. import org.apache.http.client.HttpClient;
  8. import org.apache.http.client.methods.HttpGet;
  9. import org.apache.http.impl.client.DefaultHttpClient;
  10. import org.apache.http.util.EntityUtils;
  11. /**
  12. * 用于获取整张页面的字符串表现形式
  13. * @author Administrator
  14. *
  15. */
  16. public class SpiderChild {
  17. public static void main(String[] args) {
  18. Random r =new Random();
  19. int nextInt = r.nextInt(8)+1;
  20. System.out.println(nextInt);
  21. // String stringHtml = getStringHtml("http://www.163.com");
  22. // System.out.println(stringHtml);
  23. // String[] contents = stringHtml.split("<a href=\"");
  24. // for(String s :contents){
  25. // System.out.println(s);
  26. // }
  27. }
  28. //获取�?��张页面的字符串表现形�?
  29. public static String getStringHtml(String url){
  30. //实例化客户端
  31. HttpClient client = new DefaultHttpClient();
  32. HttpGet getHttp = new HttpGet(url);
  33. //整张页面
  34. String content = null;
  35. HttpResponse response;
  36. try {
  37. response = client.execute(getHttp);
  38. //获取到实�?
  39. HttpEntity entity = response.getEntity();
  40. if(entity!=null){
  41. content = EntityUtils.toString(entity);
  42. //System.out.println(content);
  43. }
  44. } catch (ClientProtocolException e) {
  45. // TODO Auto-generated catch block
  46. e.printStackTrace();
  47. } catch (IOException e) {
  48. // TODO Auto-generated catch block
  49. e.printStackTrace();
  50. }finally{
  51. client.getConnectionManager().shutdown();
  52. }
  53. return content;
  54. }
  55. }

主类:

  1. package com.zzt.spider;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.io.FileWriter;
  6. import java.io.IOException;
  7. import java.io.InputStreamReader;
  8. import java.io.OutputStream;
  9. import java.io.PrintWriter;
  10. import java.net.MalformedURLException;
  11. import java.net.URL;
  12. import java.net.URLConnection;
  13. import java.util.ArrayList;
  14. import java.util.List;
  15. import java.util.regex.Matcher;
  16. import java.util.regex.Pattern;
  17. /**
  18. * ZX 2017.7.26
  19. * 针对于不同网站定制化爬虫,并不全面
  20. * @author Administrator
  21. *
  22. */
  23. public class BigBugSpiderSu {
  24. public static void main(String[] args) throws Exception {
  25. File file = new File("E:\\htmlfile");
  26. if(!file.exists()){
  27. boolean createNewFile = file.mkdir();
  28. System.out.println(createNewFile);
  29. }
  30. crawl();
  31. }
  32. public static void crawl() {
  33. System.out.println("begin+++++++++++++++++++++++++++++++++++++++++++");
  34. String url = "http://www.xxxx.cn/html/";
  35. for(int i=0; i<=30000; i++){
  36. String URLS = url + i+".html";
  37. System.out.println("共30000页,当前="+i+".html");
  38. try {
  39. spider(URLS);
  40. for(int j=0;j<urlUeue.size();j++){
  41. String u = urlUeue.get(j);System.out.println("页面"+u);
  42. String stringHtml = SpiderChild.getStringHtml(u);
  43. String fileName=(u.substring(u.indexOf("="))+".html").replace("=", "a");
  44. System.out.println(u);
  45. try {
  46. Thread.sleep(1000);
  47. writetoFile(stringHtml,fileName);
  48. } catch (Exception e) {
  49. e.printStackTrace();
  50. continue;
  51. }
  52. }
  53. urlUeue.clear();
  54. } catch (Exception e) {
  55. e.printStackTrace();
  56. continue;
  57. }
  58. try {
  59. Thread.sleep(0);
  60. } catch (InterruptedException e) {
  61. // TODO Auto-generated catch block
  62. e.printStackTrace();
  63. }
  64. }
  65. System.out.println("end+++++++++++++++++++++++++++++++++++++++++++");
  66. System.out.println("end+++++++++++++++++++++++++++++++++++++++++++");
  67. System.out.println("end+++++++++++++++++++++++++++++++++++++++++++");
  68. }
  69. //链接容器
  70. static List<String> urlUeue = new ArrayList<String>();
  71. //获取�?��页面的所有连�?
  72. private static void spider(String URLS) throws Exception{
  73. URL url = null;
  74. URLConnection urlconn = null;
  75. BufferedReader br = null;
  76. PrintWriter pw = null;
  77. //http://www.ajxxgk.jcy.cn/html/[0-9_/]+.html
  78. //href="/html/20170904/2/7002870.html">
  79. String regex = "//html//[0-9]+//2//[0-9_]+.html";
  80. Pattern p = Pattern.compile(regex);
  81. try {
  82. url = new URL(URLS);
  83. urlconn = url.openConnection(); //X-Forward-For
  84. urlconn.setRequestProperty("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
  85. urlconn.setRequestProperty("Accept-Encoding","gzip, deflate");
  86. urlconn.setRequestProperty("Accept-Language","zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3");
  87. urlconn.setRequestProperty("Connection","keep-alive");
  88. urlconn.setRequestProperty("Cookie", "__jsluid=053c2fe045bbf28d2215a0aa0aa713e5; Hm_lvt_2e64cf4f6ff9f8ccbe097650c83d719e=1502258037,1504571969; Hm_lpvt_2e64cf4f6ff9f8ccbe097650c83d719e=1504574596; sYQDUGqqzHpid=page_0; sYQDUGqqzHtid=tab_0; PHPSESSID=7ktaqicdremii959o4d0p2rgm6; __jsl_clearance=1504575799.118|0|cwzSt6rKCXJZrf5ZOVGhco1TpWw%3");
  89. urlconn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0");
  90. urlconn.setRequestProperty("Host","www.ajxxgk.jcy.cn");
  91. urlconn.setRequestProperty("Content-Type","text/html; charset=UTF-8");
  92. urlconn.setRequestProperty("Referer","http://www.ajxxgk.jcy.cn/html/zjxflws/2.html");
  93. pw = new PrintWriter(new FileWriter("e:/url.txt"), true);
  94. br = new BufferedReader(new InputStreamReader(
  95. urlconn.getInputStream()));
  96. String buf = null;
  97. while ((buf = br.readLine()) != null) {
  98. System.out.println(buf);
  99. // String string = new String(buf.getBytes(), "utf-8");
  100. // System.out.println(string);
  101. Matcher buf_m = p.matcher(buf);
  102. while (buf_m.find()) {
  103. urlUeue.add("http://www.xxxx.cn/"+buf_m.group());
  104. }
  105. }
  106. //System.out.println("获取成功");
  107. } catch (MalformedURLException e) {
  108. e.printStackTrace();
  109. } catch (IOException e) {
  110. e.printStackTrace();
  111. } finally {
  112. try {
  113. br.close();
  114. } catch (IOException e) {
  115. e.printStackTrace();
  116. }
  117. pw.close();
  118. }
  119. }
  120. public static void writetoFile(String context,String fileName)throws Exception{
  121. // 构建指定文件
  122. File file = new File("E:" + File.separator + "htmlfile"+File.separator+fileName);
  123. OutputStream out = null;
  124. try {
  125. // 根据文件创建文件的输出流
  126. out = new FileOutputStream(file);
  127. // 把内容转换成字节数组
  128. byte[] data = context.getBytes();
  129. // 向文件写入内�?
  130. out.write(data);
  131. } catch (Exception e) {
  132. e.printStackTrace();
  133. } finally {
  134. try {
  135. // 关闭输出�?
  136. out.close();
  137. } catch (Exception e) {
  138. e.printStackTrace();
  139. }
  140. }
  141. }
  142. }
  143. //class Dog implements Runnable{
  144. // public List<String> urlUeue;
  145. // @Override
  146. // public void run() {
  147. // for(String u:urlUeue){
  148. //
  149. // String stringHtml = SpiderChild.getStringHtml(u);
  150. // String fileName=u.substring(u.indexOf("xiangqing-"));
  151. // System.out.println("fileName"+fileName);
  152. // writetoFile(stringHtml,fileName);
  153. // }
  154. //
  155. // }
  156. // public void writetoFile(String context,String fileName){
  157. // // 构建指定文件
  158. // File file = new File("E:" + File.separator + "htmlfile"+File.separator+fileName);
  159. // OutputStream out = null;
  160. // try {
  161. // // 根据文件创建文件的输出流
  162. // out = new FileOutputStream(file);
  163. // // 把内容转换成字节数组
  164. // byte[] data = context.getBytes();
  165. // // 向文件写入内�?
  166. // out.write(data);
  167. // } catch (Exception e) {
  168. // e.printStackTrace();
  169. // } finally {
  170. // try {
  171. // // 关闭输出�?
  172. // out.close();
  173. // } catch (Exception e) {
  174. // e.printStackTrace();
  175. // }
  176. // }
  177. // }
  178. // public Dog(List<String> urlUeue) {
  179. // this.urlUeue = urlUeue;
  180. // }
  181. // public Dog() {
  182. // super();
  183. // }
  184. //
  185. //}
 
 
 

【JAVA】我的爬虫的更多相关文章

  1. Java豆瓣电影爬虫——抓取电影详情和电影短评数据

    一直想做个这样的爬虫:定制自己的种子,爬取想要的数据,做点力所能及的小分析.正好,这段时间宝宝出生,一边陪宝宝和宝妈,一边把自己做的这个豆瓣电影爬虫的数据采集部分跑起来.现在做一个概要的介绍和演示. ...

  2. Java开发搜索引擎爬虫

    package com.peidon.html; import java.io.BufferedReader; import java.io.File; import java.io.FileOutp ...

  3. Java之网络爬虫WebCollector2.1.2+selenium2.44+phantomjs2.1.1

    Java之网络爬虫WebCollector2.1.2+selenium2.44+phantomjs2.1.1 一.简介 版本匹配: WebCollector2.12 + selenium2.44.0 ...

  4. java简单web爬虫(网页图片)

    java简单web爬虫(网页图片)效果,执行main()方法后图片就下载道C盘的res文件夹中.没有的话创建一个文件夹代码里的常量根据自己的需求修改,代码附到下面. package com.sinit ...

  5. 【网络爬虫】【java】微博爬虫(五):防止爬虫被墙的几个技巧(总结篇)

    爬虫的目的就是大规模地.长时间地获取数据,跟我们正常浏览器获取数据相比,虽然机理相差不大,但总是一个IP去爬网站,大规模集中对服务器访问,时间一长就有可能被拒绝.关于爬虫长时间爬取数据,可能会要求验证 ...

  6. 【网络爬虫】【java】微博爬虫(一):小试牛刀——网易微博爬虫(自定义关键字爬取微博数据)(附软件源码)

    一.写在前面 (本专栏分为"java版微博爬虫"和"python版网络爬虫"两个项目,系列里所有文章将基于这两个项目讲解,项目完整源码已经整理到我的Github ...

  7. Java学习-058-Jsoup爬虫获取中国所有的三级行政区划数据(三),处理二级编码缺失

    通过查看数据可知,直辖市或者某些三级行政区域没有对应的二级区域,为方便后续的地址使用,可自定义缺失的二级地址. 如下示例自定义的二级行政区域的名称为一级区域的名称,对应的源码如下所示: 将此段源码添加 ...

  8. Java豆瓣电影爬虫——小爬虫成长记(附源码)

    以前也用过爬虫,比如使用nutch爬取指定种子,基于爬到的数据做搜索,还大致看过一些源码.当然,nutch对于爬虫考虑的是十分全面和细致的.每当看到屏幕上唰唰过去的爬取到的网页信息以及处理信息的时候, ...

  9. Java写的爬虫的基本程序

    这是一个web搜索的基本程序,从命令行输入搜索条件(起始的URL.处理url的最大数.要搜索的字符串),它就会逐个对Internet上的URL进行实时搜索,查找并输出匹配搜索条件的页面. 这个程序的原 ...

  10. 【转】零基础写Java知乎爬虫之进阶篇

    转自:脚本之家 说到爬虫,使用Java本身自带的URLConnection可以实现一些基本的抓取页面的功能,但是对于一些比较高级的功能,比如重定向的处理,HTML标记的去除,仅仅使用URLConnec ...

随机推荐

  1. ios 拿到第一响应者的当前视图

    UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow]; UIView *firstResponder = [keyWi ...

  2. WPF中用于嵌入其他进程窗口的自定义控件(AppContainer)

    原文:WPF中用于嵌入其他进程窗口的自定义控件(AppContainer) 版权声明:本文为博主原创文章,转载请注明作者和出处 https://blog.csdn.net/ZZZWWWPPP11199 ...

  3. 怎样从一名程序员过度到项目经理(整理自csdn论坛) 选择自 whoopee 的 Blog

    1.从程序员到PM,是一条脱变的路,事实上程序员走的路最终不应该是项目经理.首先有一点需要明白的就是,一定规模的项目中,项目经理不需要太懂技术,他可以是一知半解.项目经理的任务不是在技术方面,技术相关 ...

  4. Node.js 中开源库探秘 object-assign | 全栈之路

    这篇内容呢,讲的是另一个技术栈 Node.js 系列,虽然和咱们这里的主题不是特别吻合,不过嘛,汲取多样性的养分是快速成长的好方法,也是现在流行的全栈工程师的必经之路. 由于这篇内容涉及的是 Node ...

  5. dedecms织梦出现“Upload filetype not allow”原因和解决方案

    资源:武汉科技有限公司倍频猫 我最近升级DEDE5.6出现此问题后.和解决的方法. 假设有同学是按某些朋友用删除代码的方法解决这个问题的话,建议你修正此做法,毕竟这是有非常大安全风险的.而DEDE本身 ...

  6. iOS_9_scrollView分页

    最后效果图: BeyondViewController.h // // BeyondViewController.h // 8_scrollVIew分页浏览 // // Created by beyo ...

  7. jquery li练习

    <!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  8. Win10《芒果TV》商店内测版更新至v3.7.65.0:跨平台UI新体验,铺路SP

    Win10<芒果TV - Preview>是Win10<芒果TV>官方唯一指定内测预览版,最新的改进和功能更新将会在此版本优先体验. 春去夏来,初心犹在,Win10<芒果 ...

  9. 零元学Expression Blend 4 - Chapter 28 ListBox的基本运用与更改预设样式

    原文:零元学Expression Blend 4 - Chapter 28 ListBox的基本运用与更改预设样式 本章将先教大家认识ListBox的基本运用与更改预设样式 本章将先教大家认识List ...

  10. 编解码TIFF图像

    解码: // Open a Stream and decode a TIFF image Stream imageStreamSource = new FileStream("tulipfa ...