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

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

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

重新整理jar包:

<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5</version>
</dependency>

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

package com.zzt.spider;

import java.io.IOException;
import java.util.Random; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
/**
* 用于获取整张页面的字符串表现形式
* @author Administrator
*
*/
public class SpiderChild {
public static void main(String[] args) {
Random r =new Random();
int nextInt = r.nextInt(8)+1;
System.out.println(nextInt); // String stringHtml = getStringHtml("http://www.163.com");
// System.out.println(stringHtml);
// String[] contents = stringHtml.split("<a href=\"");
// for(String s :contents){
// System.out.println(s);
// }
} //获取�?��张页面的字符串表现形�?
public static String getStringHtml(String url){
//实例化客户端
HttpClient client = new DefaultHttpClient();
HttpGet getHttp = new HttpGet(url);
//整张页面
String content = null;
HttpResponse response; try {
response = client.execute(getHttp);
//获取到实�?
HttpEntity entity = response.getEntity();
if(entity!=null){
content = EntityUtils.toString(entity);
//System.out.println(content);
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
client.getConnectionManager().shutdown();
}
return content;
} }

主类:

package com.zzt.spider;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* ZX 2017.7.26
* 针对于不同网站定制化爬虫,并不全面
* @author Administrator *
*/
public class BigBugSpiderSu {
public static void main(String[] args) throws Exception {
File file = new File("E:\\htmlfile");
if(!file.exists()){
boolean createNewFile = file.mkdir();
System.out.println(createNewFile);
}
crawl(); }
public static void crawl() {
System.out.println("begin+++++++++++++++++++++++++++++++++++++++++++"); String url = "http://www.xxxx.cn/html/";
for(int i=0; i<=30000; i++){
String URLS = url + i+".html";
System.out.println("共30000页,当前="+i+".html");
try {
spider(URLS);
for(int j=0;j<urlUeue.size();j++){ String u = urlUeue.get(j);System.out.println("页面"+u);
String stringHtml = SpiderChild.getStringHtml(u); String fileName=(u.substring(u.indexOf("="))+".html").replace("=", "a");
System.out.println(u);
try {
Thread.sleep(1000);
writetoFile(stringHtml,fileName);
} catch (Exception e) {
e.printStackTrace();
continue;
}
}
urlUeue.clear();
} catch (Exception e) {
e.printStackTrace();
continue;
}
try {
Thread.sleep(0);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} System.out.println("end+++++++++++++++++++++++++++++++++++++++++++");
System.out.println("end+++++++++++++++++++++++++++++++++++++++++++");
System.out.println("end+++++++++++++++++++++++++++++++++++++++++++"); } //链接容器
static List<String> urlUeue = new ArrayList<String>();
//获取�?��页面的所有连�?
private static void spider(String URLS) throws Exception{
URL url = null;
URLConnection urlconn = null;
BufferedReader br = null;
PrintWriter pw = null;
//http://www.ajxxgk.jcy.cn/html/[0-9_/]+.html
//href="/html/20170904/2/7002870.html">
String regex = "//html//[0-9]+//2//[0-9_]+.html";
Pattern p = Pattern.compile(regex);
try {
url = new URL(URLS);
urlconn = url.openConnection(); //X-Forward-For
urlconn.setRequestProperty("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
urlconn.setRequestProperty("Accept-Encoding","gzip, deflate");
urlconn.setRequestProperty("Accept-Language","zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3");
urlconn.setRequestProperty("Connection","keep-alive");
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");
urlconn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0");
urlconn.setRequestProperty("Host","www.ajxxgk.jcy.cn");
urlconn.setRequestProperty("Content-Type","text/html; charset=UTF-8");
urlconn.setRequestProperty("Referer","http://www.ajxxgk.jcy.cn/html/zjxflws/2.html");
pw = new PrintWriter(new FileWriter("e:/url.txt"), true);
br = new BufferedReader(new InputStreamReader(
urlconn.getInputStream()));
String buf = null;
while ((buf = br.readLine()) != null) {
System.out.println(buf);
// String string = new String(buf.getBytes(), "utf-8");
// System.out.println(string);
Matcher buf_m = p.matcher(buf);
while (buf_m.find()) {
urlUeue.add("http://www.xxxx.cn/"+buf_m.group());
}
}
//System.out.println("获取成功");
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
pw.close();
}
} public static void writetoFile(String context,String fileName)throws Exception{
// 构建指定文件
File file = new File("E:" + File.separator + "htmlfile"+File.separator+fileName);
OutputStream out = null;
try {
// 根据文件创建文件的输出流
out = new FileOutputStream(file);
// 把内容转换成字节数组
byte[] data = context.getBytes();
// 向文件写入内�?
out.write(data);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// 关闭输出�?
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
} //class Dog implements Runnable{
// public List<String> urlUeue;
// @Override
// public void run() {
// for(String u:urlUeue){
//
// String stringHtml = SpiderChild.getStringHtml(u);
// String fileName=u.substring(u.indexOf("xiangqing-"));
// System.out.println("fileName"+fileName);
// writetoFile(stringHtml,fileName);
// }
//
// }
// public void writetoFile(String context,String fileName){
// // 构建指定文件
// File file = new File("E:" + File.separator + "htmlfile"+File.separator+fileName);
// OutputStream out = null;
// try {
// // 根据文件创建文件的输出流
// out = new FileOutputStream(file);
// // 把内容转换成字节数组
// byte[] data = context.getBytes();
// // 向文件写入内�?
// out.write(data);
// } catch (Exception e) {
// e.printStackTrace();
// } finally {
// try {
// // 关闭输出�?
// out.close();
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
// }
// public Dog(List<String> urlUeue) {
// this.urlUeue = urlUeue;
// }
// public Dog() {
// super();
// }
//
//}
 
 
 

【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. Android 悬浮窗、悬浮球开发

    原文:Android 悬浮窗.悬浮球开发 1.权限管理 直接看我另外一篇博客吧,传送门: https://my.oschina.net/u/1462828/blog/1933162 2.Base类Ba ...

  2. C#代码实现矢量画图

    原文:C#代码实现矢量画图 版权声明:本文为博主原创文章,转载请附上链接地址. https://blog.csdn.net/ld15102891672/article/details/80275969 ...

  3. 本文摘录 - FlumeJava

    本文节选不保证论文的完整性和理解的准确性  原始的MapReduce.分Map,Shuffle,Reduce. Map里包含shards. Shuffle理解为groupByKey的事情.Reduce ...

  4. XF相对控件布局

    using System; using Xamarin.Forms; using Xamarin.Forms.Xaml; [assembly: XamlCompilation (XamlCompila ...

  5. WPF 中style文件的引用

    原文:WPF 中style文件的引用 总结一下WPF中Style样式的引用方法: 一,内联样式: 直接设置控件的Height.Width.Foreground.HorizontalAlignment. ...

  6. 应用ImageJ对荧光图片进行半定量分析

    原文 应用ImageJ对荧光图片进行半定量分析 前言ImageJ是个好东西……(省略1000字)总地来说对我们的好处是:1.免费2.多功能,基本功能就很多,加上插件可以说得上是无限多(前提是你找得到, ...

  7. WP8.1使用HttpClient类

    Uri uri = new Uri("http://www.cnsos.net/weburl/index.htm", UriKind.Absolute); HttpClient m ...

  8. Android零基础入门第52节:自定义酷炫进度条

    原文:Android零基础入门第52节:自定义酷炫进度条 Android系统默认的ProgressBar往往都不能满足实际开发需要,一般都会开发者自定义ProgressBar. 在Android开发中 ...

  9. 如果您想确保Windows 10在新用户登录时不安装内置应用程序,则必须删除所有配置的应用程序。

    原文 如果您想确保Windows 10在新用户登录时不安装内置应用程序,则必须删除所有配置的应用程序. 本文的内容 已安装与配置的应用程序 删除配置的应用程序 安装与配置的应用程序^ 在介绍如何删除所 ...

  10. BI-学习之 新概念介绍

    什么是统一维度模型 层次结构.级别.成员和度量值 什么是MDX MDX与SQL的区别 什么是数据仓库 什么是OLAP数据分析引擎 BI企业级解决方案 什么是统一维度模型 维度(dimension)是描 ...