`
bdk82924
  • 浏览: 564983 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

HttpClient 网络抓取

 
阅读更多

利用 HttpClient 进行抓取 ,有如下几点要注意的

1、抓取普通页面,注意中文问题

2、抓取需要登录的页面,有验证码 和无验证码区分

3、防抓取页面,如Javaeye

4、设置代理服务器

5、解析抓取后的内容,解析可以 用Jsoup,文档:http://www.open-open.com/jsoup/

 

 代码:

 

  public final static void main(String[] args) throws Exception
    {
        try
        {

            String url = "http://bdk82924.iteye.com/admin/blogs/1329405";

            HttpClient client = new HttpClient();
            PostMethod post = new PostMethod(url);
            // 设置http头
            post.setRequestHeader(new Header("Content-type", "text/xml; charset=\"utf-8\""));
            post.setRequestHeader(new Header("User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"));
            // 设置代理服务器
            client.getHostConfiguration().setProxy("proxy.com", 80);

            int result = client.executeMethod(post);
            if (result != 200)
            {
                // 失败的响应代码
                System.out.println("获取失败,rspCode:" + result);
            }

            System.out.println(new String(post.getResponseBody(), "UTF-8"));
        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }

 

2、抓取需要登录的页面

 

 public class Client
{
 

    private static Cookie[] cookies;

    /**
     * 的到Http请求结果
     *
     * @param url
     *            请求地址
     * @param parms
     *            请求参数
     * @return
     */
    public static void doLogin(String url, Map parms)
    {
        byte[] body = new byte[0];
        String str = null;
        // 构造HttpClient的实例
        HttpClient client = new HttpClient();
        // 创建GET方法的实例
        PostMethod postMethod = new PostMethod(url);
        // 填入各个表单域的值
        NameValuePair[] data = new NameValuePair[parms.keySet().size()];
        Iterator it = parms.entrySet().iterator();
        int i = 0;
        while (it.hasNext())
        {
            Map.Entry entry = (Map.Entry) it.next();
            Object key = entry.getKey();
            Object value = entry.getValue();
            data[i] = new NameValuePair(key.toString(), value.toString());
            i++;
        }
        // 将表单的值放入postMethod中
        postMethod.setRequestBody(data);
        try
        {
            // 执行postMethod
            int statusCode = client.executeMethod(postMethod);
            // HttpClient对于要求接受后继服务的请求,象POST和PUT等不能自动处理转发
            // 301或者302
            if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY || statusCode == HttpStatus.SC_MOVED_TEMPORARILY)
            {
                // 从头中取出转向的地址
                Header locationHeader = postMethod.getResponseHeader("location");
                String location = null;
                if (locationHeader != null)
                {
                    location = locationHeader.getValue();
                } else
                {
                    System.err.println("Location field value is null.");
                }
            }
            cookies = client.getState().getCookies();
            client.getState().addCookies(cookies);

        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    /**
     * 的到Http请求结果
     *
     * @param url
     *            请求地址
     * @param parms
     *            请求参数
     * @return
     */
    public static byte[] getURL(String url)
    {
        byte[] body = new byte[0];
        // 构造HttpClient的实例
        HttpClient client = new HttpClient();
        // 创建GET方法的实例
        GetMethod get = new GetMethod(url);

        get.setRequestHeader("Cookie", cookies.toString());
        try
        {
            client.executeMethod(get);
            body = get.getResponseBody();
        } catch (Exception e)
        {
            e.printStackTrace();
        }

        return body;
    }

    public static void main(String[] args) throws UnsupportedEncodingException
    {
   String loginURL = "http://XX/login.do";
   String testURL = "http://XX/a.do";
 
        Map map = new HashMap();
        map.put("username", "XX");
        map.put("passwd", "XX");
        doLogin(loginURL, map);

        String s = new String(getURL(testURL), "utf-8");
        System.out.println(s);

    }

}

 

 

 

分享到:
评论

相关推荐

    httpClient+jsoup 抓取网页数据

    在IT领域,网络数据抓取是一项重要的技能,它允许我们从网页中提取所需的信息,用于数据分析、内容聚合或自动化任务。HttpClient和Jsoup是两个Java库,分别专注于HTTP通信和HTML解析,它们常被组合使用来高效地抓取...

    java httpclient 抓取 数据 和jar 包

    Java HttpClient 是 Apache HttpClient 库的一部分,它提供了丰富的功能,包括连接管理、重试策略、超时设置等,使得在Java中进行网络通信变得更加便捷。HttpClient库不仅支持基本的HTTP协议,还支持HTTPS以及一些...

    httpClient+jsoup抓取网页数据实例和jar包

    在IT领域,网络爬虫是获取网页数据的重要手段,而HttpClient和Jsoup是两种常用的Java库,用于实现这一目的。HttpClient提供了低级别的HTTP通信能力,而Jsoup则是一个解析和操作HTML文档的强大工具。本教程将详细介绍...

    httpclient远程网页抓取工具

    HTTPClient是Apache软件基金会的 HttpClient项目提供的一款Java库,它为Java程序员提供了强大的HTTP客户端功能,使得能够方便地进行网络请求和网页抓取。在本文中,我们将深入探讨HTTPClient库的基本概念、主要功能...

    httpclient抓取网页数据和所需的10个jar包

    总结来说,HttpClient是一个强大的Java库,用于网络数据抓取和通信。正确地引入并使用相关的jar包,可以帮助开发者高效地实现HTTP请求,从而获取和处理网页数据。在实际开发中,应结合具体需求灵活运用HttpClient的...

    httpclient 网络爬虫必备包

    在IT行业中,网络爬虫是数据获取的重要手段,它能够自动化地从互联网上抓取大量信息。HttpClient是一个广泛使用的Java库,专为处理HTTP协议而设计,尤其在开发网络爬虫时扮演着核心角色。本篇文章将深入探讨...

    HttpClient 登录163邮箱

    HttpClient是Apache基金会开发的一个HTTP客户端库,用于在Java应用程序中执行HTTP请求。...在本例中,我们将探讨如何使用HttpClient登录163邮箱。...正确配置和使用HttpClient,能够实现高效且可靠的网络通信。

    httpclient绕过验证码直接抓取

    "HttpClient绕过验证码直接抓取" HttpClient是一种常用的网络请求库,常用于网络爬虫、自动化测试、数据爬取等领域。今天,我们将讨论如何使用HttpClient绕过验证码直接抓取网站数据。 绕过验证码的原理 验证码是...

    HttpClient get、post 请求,抓取网络数据,jar包以及源码

    HttpClient库使得开发者能够轻松地实现网络数据的抓取和交换,这对于进行Web服务交互、网页爬虫或者任何需要从互联网获取数据的应用来说都非常有用。 ### GET请求 GET请求是最常见的HTTP方法,用于从服务器上获取...

    httpclient

    《HttpClient:网络爬虫...通过熟练掌握HttpClient的使用,开发者可以构建出稳定、高效的网络爬虫,实现对互联网数据的高效抓取和处理。在实际项目中,应结合具体需求,灵活运用HttpClient的各种特性,以实现最佳效果。

    httpClient需要的jar包

    在Java应用中,HttpClient常用于网页抓取、API调用以及自动化测试等场景。 本压缩包文件"httpClient"很可能包含了HttpClient库所需的必备JAR文件,这些文件通常包括HttpClient的核心库、依赖的第三方库以及可能的...

    使用HTMLPARSER和HTTPCLIENT制作网络爬虫,附赠相关技术文档。

    总的来说,HTMLPARSER和HTTPCLIENT是构建网络爬虫的强大工具,它们可以帮助开发者高效地抓取和解析网页内容。通过学习和实践,你不仅可以创建简单的爬虫,还能掌握处理复杂网页结构和网络请求的技术,这对于数据挖掘...

    HttpClient重新封装的HttpClient类

    在Web开发中,HttpClient常常被用于网页抓取、API调用和其他网络通信任务。本篇文章将深入探讨重新封装的HttpClient类,以及如何利用它进行高效且灵活的网络请求。 首先,我们来看一下`HttpClient`类的基本用法。...

    Httpclient依赖包

    在Java应用程序中,HttpClient常用于Web服务的调用、数据抓取或自动化测试等场景。 HttpClient的核心特性包括: 1. **请求构造与执行**:HttpClient允许开发者精确控制HTTP请求的每一个细节,如方法类型(GET、...

    httpclient4.1.2 jar包

    HttpClient 4.1.2广泛应用于Web服务调用、数据抓取、文件上传下载等场景。例如,在微服务架构中,服务间通信经常使用HttpClient进行RESTful API调用;在爬虫项目中,HttpClient用于向目标网站发送HTTP请求,获取网页...

    C#网络抓取源码范例(分析天涯文章)

    在本项目中,"C#网络抓取源码范例(分析天涯文章)"是一个使用C#编程语言实现的网络爬虫程序,旨在抓取并分析天涯社区中的文章内容。主要涉及的技术点包括网络请求、HTML解析、数据提取以及特定内容过滤。下面将详细...

    httpclient4.5源码学习

    HttpClient 是 Apache 开源组织提供的一款强大且功能丰富的 Java HTTP 客户端库,广泛应用于网络数据的抓取、服务接口的测试以及分布式系统中的通信。HttpClient 4.5 版本作为其重要的一个迭代,引入了许多新特性和...

    C#网络抓取文字

    在IT行业中,网络抓取(Web Scraping)是一种获取网页数据的技术,通常用于自动化数据分析、信息提取或构建搜索引擎。在本教程中,我们将探讨如何使用C#语言进行网络抓取,特别是针对那些不允许直接复制粘贴的网站。...

Global site tag (gtag.js) - Google Analytics