HTML页面检索

页面检索 :
Httpclient下载地址:http://www.innovation.ch/java/HTTPClient/
Htmlparser下载地址:http://htmlparser.sourceforge.net/
个人觉得,如果业务需要从指定的页面获得某些需要的值,那么除了用正则表达式,用htmlparser也是一个非常方便快捷的选择。htmlparser主要是可以从标准的html标签里面将标签内的数据提取出来。
当然登陆指定网站的话,除了用java自带的方法,用Apache的httpclient更加方便。
登陆某网站的例子:比如登陆news.163.com
import java.io.IOException;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.methods.GetMethod;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
/**
 *
 * @author domando
 */
public class InsertRecord {

    private static String LOGON_SITE = "news.163.com";

    /**
     * 连接端口
     */
    private static int LOGON_PORT = 80;

    private static HttpClient client = null;

    public static void main (String args[]) throws HttpException, IOException, ParserException {
        //新建一个连接对象
        client = new HttpClient();
        //连接到news.163.com
        client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT, "http");
        //设置CookiePolicy在这里不需要
        client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
        //进入国际新闻的网页
        GetMethod authGet = new GetMethod("/world/");
        //进行连接,并且判断返回值是否成功
        //具体返回值代表的意思可以在文档中查到
        if (client.executeMethod(authGet) == 200) {;
//            System.out.println(authGet.getResponseBodyAsString() ) ;
            getNews(authGet.getResponseBodyAsString());
        }
    }
//这样就打印出了163国际新闻网页的全部html代码。
//接下来就可以根据需要用htmlparser进行页面取值了。
    public static void getNews(String inputHtml) throws ParserException {
        //将传进来的代码进行类型转换
        Parser parserMbMsg = Parser.createParser(inputHtml, "gb3212");
        //将所有超链接提取出来
        NodeFilter ahrefFilter = new TagNameFilter("a");
        //转换成list类型
        NodeList nodeListMbMsg = parserMbMsg.extractAllNodesThatMatch(ahrefFilter);
       
        for (int i = 0;i<nodeListMbMsg.size() ; i++) {
            System.out.println("-----------------------------"+i);
            System.out.println(nodeListMbMsg.elementAt( i));//打印出每一个元素
            //打印出所有超链接的内容
            LinkTag link = (LinkTag) nodeListMbMsg.elementAt(i);
            System.out.println(link.getLinkText() );
            //System.out.println(link.getLink() );//打印出所有的链接地址
        }
    }
}
这仅仅是个例子,有些可能有些值没有取到,根据页面的具体情况再改进一些就可以了。
根据文档可以找到很多其他的类和方法,可以轻便的提取表格,层 、input tag里面的内容。图片、script代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值