超简单的java爬虫

最简单的爬虫,不需要设定代理服务器,不需要设定cookie,不需要http连接池,使用httpget方法,只是为了获取html代码...

好吧,满足这个要求的爬虫应该是最基本的爬虫了。当然这也是做复杂的爬虫的基础。

使用的是httpclient4的相关API。不要跟我讲网上好多都是httpclient3的代码该怎么兼容的问题,它们差不太多,但是我们应该选择新的能用的接口!

当然,还是有很多细节可以去关注一下,比如编码问题(我一般都是强制用UTF-8的)

放码过来:

 

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class Easy {

    //输入流转为String类型
    public static String inputStream2String(InputStream is)throws IOException{
        ByteArrayOutputStream baos=new ByteArrayOutputStream();
        int i=-1;
        while((i=is.read())!=-1){
            baos.write(i);
        }
        return baos.toString();
    }

    //抓取网页的核心函数
    public static void doGrab() throws Exception {
        //httpclient可以认为是模拟的浏览器
        CloseableHttpClient httpclient = HttpClients.createDefault();
        try {
            //要访问的目标页面url
            String targetUrl="http://chriszz.sinaapp.com";
            //使用get方式请求页面。复杂一点也可以换成post方式的
            HttpGet httpGet = new HttpGet(targetUrl);
            CloseableHttpResponse response1 = httpclient.execute(httpGet);

            try {
                String status=response1.getStatusLine().toString();
                //通过状态码来判断访问是否正常。200表示抓取成功
                if(!status.equals("HTTP/1.1 200 OK")){
                    System.out.println("此页面可以正常获取!");
                }else{
                    response1 = httpclient.execute(httpGet);
                    System.out.println(status);
                }
                //System.out.println(response1.getStatusLine());
                HttpEntity entity1 = response1.getEntity();
                // do something useful with the response body
                // and ensure it is fully consumed
                InputStream input=entity1.getContent();

                String rawHtml=inputStream2String(input);
                System.out.println(rawHtml);

                //有时候会有中文乱码问题,这取决于你的eclipse java工程设定的编码格式、当前java文件的编码格式,以及抓取的网页的编码格式
                //比如,你可以用String的getBytes()转换编码
                //String html = new String(rawHtml.getBytes("ISO-8859-1"),"UTF-8");//转换后的结果

                EntityUtils.consume(entity1);
            } finally {
                response1.close();//记得要关闭
            }
        } finally {
            httpclient.close();//这个也要关闭哦!
        }
    }

    /*
     * 最简单的java爬虫--抓取百度首页
     * memo:
     * 0.抓取的是百度的首页,对应一个html页面。
     *         (至于为啥我们访问的是http://www.baidu.com而不是http://www.baidu.com/xxx.html,这个是百度那边设定的,总之我们会访问到那个包含html的页面)
     * 1.使用http协议的get方法就可以了(以后复杂了可以用post方法,设定cookie,甚至设定http连接池;或者抓取json格式的数据、抓取图片等,也是类似的)
     * 2.通过httpclient的相关包(httpclient4版本)编写,需要下载并添加相应的jar包到build path中
     * 3.代码主要参考了httpclient(http://hc.apache.org/)包里面的tutorial的pdf文件。
     */
    public static void main(String[] args) throws Exception{
        Easy.doGrab();//为了简答这里把doGrab()方法定义为静态方法了所以直接Easy.doGrab()就好了
    }

}
时间: 2024-10-12 07:14:11

超简单的java爬虫的相关文章

java爬虫技术用的包的问题

问题描述 这是我用的包,还差什么?另外懂的朋友最好说明清楚一点java爬虫包的使用.不局限我的测试代码.感激不尽importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importorg.apache.commons.httpclient.Header;importorg.apache.commons.httpclient.HttpC

java爬虫Gecco工具抓取新闻实例_java

最近看到Gecoo爬虫工具,感觉比较简单好用,所有写个DEMO测试一下,抓取网站 http://zj.zjol.com.cn/home.html,主要抓取新闻的标题和发布时间做为抓取测试对象.抓取HTML节点通过像Jquery选择器一样选择节点,非常方便,Gecco代码主要利用注解实现来实现URL匹配,看起来比较简洁美观. 添加Maven依赖 <dependency> <groupId>com.geccocrawler</groupId> <artifactId&

Java爬虫实战抓取一个网站上的全部链接_java

前言:写这篇文章之前,主要是我看了几篇类似的爬虫写法,有的是用的队列来写,感觉不是很直观,还有的只有一个请求然后进行页面解析,根本就没有自动爬起来这也叫爬虫?因此我结合自己的思路写了一下简单的爬虫. 一 算法简介 程序在思路上采用了广度优先算法,对未遍历过的链接逐次发起GET请求,然后对返回来的页面用正则表达式进行解析,取出其中未被发现的新链接,加入集合中,待下一次循环时遍历. 具体实现上使用了Map<String, Boolean>,键值对分别是链接和是否被遍历标志.程序中使用了两个Map集

一个超简单的jQuery回调函数例子(分享)_jquery

jQuery回调函数简单使用 比如说,我们想要点击某个按钮后触发事件, 先把一些指定内容给隐藏掉, 然后跳出相关信息的对话框. 如果使用普通的方法, 不用回调函数的话, 会有怎么样的效果呢? 效果是先弹出对话框再隐藏内容, 然后再隐藏指定内容. 这显然不是我们想要的效果, 如果使用回调函数,就可以解决这个问题. 当然,回调函数功能远不只这么简单-- 具体的代码如下: <%@ page language="java" import="java.util.*" p

Android编写简单的网络爬虫

一.网络爬虫的基本知识 网络爬虫通过遍历互联网络,把网络中的相关网页全部抓取过来,这体现了爬的概念.爬虫如何遍历网络呢,互联网可以看做是一张大图,每个页面看做其中的一个节点,页面的连接看做是有向边.图的遍历方式分为宽度遍历和深度遍历,但是深度遍历可能会在深度上过深的遍历或者陷入黑洞.所以,大多数爬虫不采用这种形式.另一方面,爬虫在按照宽度优先遍历的方式时候,会给待遍历的网页赋予一定优先级,这种叫做带偏好的遍历. 实际的爬虫是从一系列的种子链接开始.种子链接是起始节点,种子页面的超链接指向的页面是

SEO其实超简单 但最难的地方你必须去做

SEO为什么说超简单呢? 其实就算刚入行的站长,估计都听到长长有人说:"内容为王,外链为皇".其实SEO就是这8个字2个4字词!刚刚入行的站长,估计听到这8个字,其实有点不解!不明白其中的含义!以中国人用的最多搜索引擎百度来讲,您的内容是高质量的内容(原创),切您站里的内容资源,是在互连网上非常断缺的.而你的站有这些资源,而且是独一无二的首发内容.呢您的基本上月入万元是很轻松了.百度给您的权重直最底都会是5.其他搜索引擎也是这么个理!外链为撒又是皇比内容的王还厉害,从字义上看.呢是因为

纯CSS实现超简单的二级下拉导航菜单代码

本文实例讲述了纯CSS实现超简单的二级下拉导航菜单代码.分享给大家供大家参考.具体如下: 这是一款纯CSS菜单,二级下拉导航效果,是最简洁的CSS导航菜单,兼容性也很棒,IE7/8.火狐等都支持,而且它还是学习CSS菜单编写的典型教程,让你学会很多CSS技巧. 运行效果截图如下: 具体代码如下:   复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.

python超简单解决约瑟夫环问题

  本文实例讲述了python超简单解决约瑟夫环问题的方法.分享给大家供大家参考.具体分析如下: 约瑟环问题大家都熟悉.题目是这样的.一共有三十个人,从1-30依次编号.每次隔9个人就踢出去一个人.求踢出的前十五个人的号码: 明显的约瑟夫环问题,python实现代码如下: ? 1 2 3 4 5 6 a = [ x for x in range(1,31) ] #生成编号 del_number = 8 #该删除的编号 for i in range(15): print a[del_number]

PS超简单1招教你拯救蓝天

如果你是风光摄影新手,看到优秀的作品的时候,是不是会感叹为什么别人拍出来的天颜色那么丰富,自己拍出来的天总是灰蒙蒙的,连理想的蓝色都无法呈现呢? 当天空的亮度远高于地面景物时,就很容易出现这种情况,尤其是在早晨或黄昏时.一个经典的解决方案就是使用中灰渐变滤镜.但是,它们用起来可能比较麻烦,尤其当你使用前组镜片需要旋转的镜头时. 另一个解决办法是减曝光补偿来让画面减少曝光,来保证天空不会因过曝而变白,但是这也可能会导致地面欠曝过暗而失去细节.即使在开启了动态范围优化功能的情况下,这种情况也时有发生