超简单的java爬虫

简介: 最简单的爬虫,不需要设定代理服务器,不需要设定cookie,不需要http连接池,使用httpget方法,只是为了获取html代码... 好吧,满足这个要求的爬虫应该是最基本的爬虫了。当然这也是做复杂的爬虫的基础。

最简单的爬虫,不需要设定代理服务器,不需要设定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()就好了
    }

}

目录
相关文章
|
4月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
4月前
|
数据采集 存储 前端开发
Java爬虫性能优化:多线程抓取JSP动态数据实践
Java爬虫性能优化:多线程抓取JSP动态数据实践
|
3月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
|
数据采集 缓存 Java
Python vs Java:爬虫任务中的效率比较
Python vs Java:爬虫任务中的效率比较
|
10月前
|
数据采集 JSON Java
Java爬虫获取微店快递费用item_fee API接口数据实现
本文介绍如何使用Java开发爬虫程序,通过微店API接口获取商品快递费用(item_fee)数据。主要内容包括:微店API接口的使用方法、Java爬虫技术背景、需求分析和技术选型。具体实现步骤为:发送HTTP请求获取数据、解析JSON格式的响应并提取快递费用信息,最后将结果存储到本地文件中。文中还提供了完整的代码示例,并提醒开发者注意授权令牌、接口频率限制及数据合法性等问题。
|
10月前
|
数据采集 存储 Java
Java爬虫获取微店店铺所有商品API接口设计与实现
本文介绍如何使用Java设计并实现一个爬虫程序,以获取微店店铺的所有商品信息。通过HttpClient发送HTTP请求,Jsoup解析HTML页面,提取商品名称、价格、图片链接等数据,并将其存储到本地文件或数据库中。文中详细描述了爬虫的设计思路、代码实现及注意事项,包括反爬虫机制、数据合法性和性能优化。此方法可帮助商家了解竞争对手,为消费者提供更全面的商品比较。
|
8月前
|
数据采集 存储 网络协议
Java HttpClient 多线程爬虫优化方案
Java HttpClient 多线程爬虫优化方案
|
数据采集 存储 Java
Java爬虫图像处理:从获取到解析
Java爬虫图像处理:从获取到解析
|
10月前
|
数据采集 算法 Java
如何在Java爬虫中设置动态延迟以避免API限制
如何在Java爬虫中设置动态延迟以避免API限制
|
数据采集 存储 Web App开发
Java爬虫:深入解析商品详情的利器
在数字化时代,信息处理能力成为企业竞争的关键。本文探讨如何利用Java编写高效、准确的商品详情爬虫,涵盖爬虫技术概述、Java爬虫优势、开发步骤、法律法规遵守及数据处理分析等内容,助力电商领域市场趋势把握与决策支持。