`
逆风的香1314
  • 浏览: 1431394 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HttpClient和HtmlParser配合实现自动登陆系统抽取页面信息

阅读更多

 

HtmlParser代码接口变化比较多,因此写一个最新的。废话不多说,贴代码共大家享用!

/*
 * Main.java
 *
 * Created on 2007年1月19日, 上午9:14
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package wapproxy;

import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.*;
import org.apache.commons.httpclient.params.HttpMethodParams;

import java.io.*;

import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.*;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;

 

/**
 *
 * @author xcz
 */
public class Main {
   
   
    /** Creates a new instance of Main */
    public Main() {
    }
   
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws Exception  {
        // Create an instance of HttpClient.
        HttpClient client = new HttpClient();
       
        // Create a method instance.
        PostMethod post_method = new PostMethod("http://localhost/rcpq/");
       
        NameValuePair[] data = {
            new NameValuePair("username", "admin"),
            new NameValuePair("password", "admin"),
            new NameValuePair("dologin", "1"),
        };
       
        post_method.setRequestBody(data);
       
       
       
        try {
            // Execute the method.
            int statusCode = client.executeMethod(post_method);
           
            if (statusCode != HttpStatus.SC_OK) {
                System.err.println("Method failed: " + post_method.getStatusLine());
            }
           
            // Read the response body.
            //byte[] responseBody = post_method.getResponseBody();
           
            // Deal with the response.
            // Use caution: ensure correct character encoding and is not binary data
            //System.out.println(new String(responseBody));
           
        } catch (HttpException e) {
            System.err.println("Fatal protocol violation: " + e.getMessage());
            e.printStackTrace();
        } catch (IOException e) {
            System.err.println("Fatal transport error: " + e.getMessage());
            e.printStackTrace();
        } finally {
            // Release the connection.
            post_method.releaseConnection();
        }
       
        byte[] responseBody = null;
       
        GetMethod get_method = new GetMethod("http://localhost/rcpq/unit.php");
       
        // Provide custom retry handler is necessary
        get_method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
                new DefaultHttpMethodRetryHandler(3, false));
       
        try {
            // Execute the method.
            int statusCode = client.executeMethod(get_method);
           
            if (statusCode != HttpStatus.SC_OK) {
                System.err.println("Method failed: " + get_method.getStatusLine());
            }
           
            // Read the response body.
            //responseBody = get_method.getResponseBody();

            //这里用流来读页面
            
            InputStream in = get_method.getResponseBodyAsStream();
            if (in != null) {
                byte[] tmp = new byte[4096];
                int bytesRead = 0;
                ByteArrayOutputStream buffer = new ByteArrayOutputStream(1024);
                while ((bytesRead = in.read(tmp)) != -1) {
                    buffer.write(tmp, 0, bytesRead);
                }
                responseBody = buffer.toByteArray();
            }
           
           
            // Deal with the response.
            // Use caution: ensure correct character encoding and is not binary data
            //System.out.println(new String(responseBody));
           
        } catch (HttpException e) {
            System.err.println("Fatal protocol violation: " + e.getMessage());
            e.printStackTrace();
        } catch (IOException e) {
            System.err.println("Fatal transport error: " + e.getMessage());
            e.printStackTrace();
        } finally {
            // Release the connection.
            get_method.releaseConnection();
        }
       
        Parser parser;
       
        parser = Parser.createParser(new String(responseBody, "GBK"), "GBK");
       
       
        String filterStr = "table";
        NodeFilter filter = new TagNameFilter(filterStr);
       
        NodeList tables = parser.extractAllNodesThatMatch(filter);
       
        //System.out.println(tables.elementAt(17).toString());

       //找到单位列表所在的表格
        
        TableTag tabletag = (TableTag) tables.elementAt(17);
       
        TableRow row = tabletag.getRow(3);
       
        TableColumn[] cols = row.getColumns();
        //System.out.println("单位名称:" + cols[2].toHtml());
        System.out.println("单位名称:" + cols[2].childAt(0).getText());
       
    }
   
}

分享到:
评论

相关推荐

    使用 HttpClient 和 HtmlParser 实现简易网络爬虫

    你可以在这里找到HttpClient的更多信息和下载链接:https://hc.apache.org/httpcomponents-client-ga/index.html HtmlParser是一个开源的HTML解析库,特别适合用于解析和处理网页内容。它提供了线性和嵌套两种解析...

    使用 HttpClient 和 HtmlParser 实现简易爬虫

    ### 使用HttpClient和HtmlParser实现简易爬虫的知识点详解 #### 一、HttpClient与HtmlParser简介 **HttpClient简介:** HttpClient是Jakarta Commons项目中的一个重要组件,用于提供灵活且高效的HTTP协议支持。它...

    使用_HttpClient_和_HtmlParser_实现简易爬虫

    HttpClient 和 HtmlParser 是两个在Java开发中用于网络通信和网页解析的重要开源库。HttpClient 主要负责处理HTTP协议的网络请求,如GET和POST,而HtmlParser则用于解析HTML文档,提取所需信息。以下是对这两个库的...

    基于HttpClient与HTMLParser 的网页正文提取

    3. 网页抓取和分析方法的实现:文章中提出的基于HttpClient与HTMLParser的网页抓取解析方法,结合了两者的优点,实现了快速且有效的网页内容抓取和正文提取。该方法能够针对特定的网页内容进行深入分析,并能够应对...

    HttpClient&&HtmlParser(Crawler)网络爬虫

    为了实现更复杂的爬虫功能,如处理JavaScript渲染的页面、模拟登录、反反爬虫策略等,可能还需要结合其他库,如Selenium、WebKit等。在实际开发中,理解HTTP协议、HTML结构以及选择合适的解析库是提高爬虫效率和稳定...

    htmlparser实现从网页上抓取数据.pdf

    6. **实际应用**:HTMLParser常用于爬虫项目中,从网页中抽取特定信息,如新闻标题、产品价格或评论内容。也可以用于提取页面元数据,比如关键词和描述,甚至用于网站自动化测试,验证HTML结构是否符合预期。 7. **...

    51job职位信息爬取器

    通过使用HTMLParser,该爬虫可以识别并抽取这些关键信息,将其存储到本地或者数据库中,以便于分析和后续使用。这为人力资源部门或求职者提供了快速获取大量职位数据的可能,无需手动浏览网页。 程序的编写需要JDK...

    webmagic源码

    这个框架的核心在于模块化的设计,它将爬虫分为四个主要部分:`PageFetcher`(页面获取)、`HtmlParser`(HTML解析)、`Pipeline`(数据处理)和`Scheduler`(调度器)。下面我们将详细探讨这些模块以及WebMagic源码...

    基于Java技术的智能化搜索引擎的研究与设计.pdf

    随着互联网的迅猛发展,网络上的信息量呈爆炸式增长,如何从海量信息中高效、准确地抽取有价值的信息,成为了一个迫切需要解决的问题。搜索引擎作为信息检索的关键工具,其性能的优化至关重要。通过融合数据挖掘技术...

    java爬虫教程及工具应用

    WebMagic是一款简单易用的Java爬虫框架,它能够快速地抓取网页数据,并自动抽取URL。 - **特点**: - 易于上手,适合初学者。 - 提供了强大的数据抽取功能。 #### 四、案例分析 为了更好地理解Java爬虫的实际...

    java开源包3

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包4

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包1

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包11

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包2

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包6

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包5

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包10

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

Global site tag (gtag.js) - Google Analytics