0 0

java网页抓取问题0

package com.rensanning;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.ProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.DefaultRedirectStrategy;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
import org.cyberneko.html.parsers.DOMParser;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import com.sun.org.apache.xpath.internal.XPathAPI;

public class DhlDetail {


private static final String HTML_DETAIL_HTML = "html/detail.html";


private static String url1 = "http://www.cn.dhl.com/content/cn/zh/express/tracking.shtml?brand=DHL&AWB=8545665704%0D%0A";

public static void main(String[] args) {

try {

//抓取追踪信息页面HTML  .

    getHtml(url1, HTML_DETAIL_HTML, null);   
 
    //获取 抓取运输进程页面HTML时 需要的参数   
    Map<String, String> data = getHiddenValue(HTML_DETAIL_HTML);   
 
    //抓取运输进程页面HTML    
    getHtml(url1, HTML_DETAIL_HTML, data);   
 
    //获取运输进程   
    List<DetailBean> list = getDetailList(HTML_DETAIL_HTML);  

//打印详细的运输进程
DetailBean bean = null;
System.out.println("地点" + "\t" + "日期" + "\t" + "当地时间" + "\t" + "处理");
for (int i = 0; i < list.size(); i++) {
bean = list.get(i);
System.out.println(bean.getLocation() + "\t" + bean.getDate() + "\t" + bean.getTime() + "\t" + bean.getOperation());
}

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

private static List<DetailBean> getDetailList(String html) throws Exception {
List<DetailBean> list = new ArrayList<DetailBean>();

DOMParser parser = new DOMParser();
parser.setFeature("http://xml.org/sax/features/namespaces", false);
parser.parse(html);
Node node = parser.getDocument();

Node tb = XPathAPI.selectSingleNode(node, "//TABLE[@class='dataTable']");
NodeList tdlist = XPathAPI.selectNodeList(tb, "//TR/TD");

int line = 0;
while (line < tdlist.getLength() / 4) {
DetailBean bean = new DetailBean();

bean.setLocation(deleteSpace(tdlist.item(line * 4 + 0).getTextContent()));
bean.setDate(deleteSpace(tdlist.item(line * 4 + 1).getTextContent()));
bean.setTime(deleteSpace(tdlist.item(line * 4 + 2).getTextContent()));
bean.setOperation(deleteSpace(tdlist.item(line * 4 + 3).getTextContent()));

line++;

list.add(bean);
}

return list;
}

private static Map<String, String> getHiddenValue(String html) throws Exception {
Map<String, String> data = new HashMap<String, String>();

List<String> params = new ArrayList<String>();
params.add("loc".toLowerCase());
params.add("USER_HISTORY_LIST".toLowerCase());
params.add("progressIsLoaded".toLowerCase());
params.add("refresh_sii".toLowerCase());
params.add("showSpPkgProg1".toLowerCase());
params.add("datakey".toLowerCase());
params.add("HIDDEN_FIELD_SESSION".toLowerCase());
params.add("trackNums".toLowerCase());

DOMParser parser = new DOMParser();
// parser.setFeature("http://xml.org/sax/features/namespaces", false);
parser.parse(html);
Node node = parser.getDocument();

NodeList nodeList = XPathAPI.selectNodeList(node, "//INPUT");
for (int i = 0; i < nodeList.getLength(); i++) {
Element e = (Element) nodeList.item(i);
if ("hidden".equalsIgnoreCase(e.getAttribute("type"))
&& params.contains(e.getAttribute("name").toLowerCase())) {
data.put(e.getAttribute("name"), e.getAttribute("value"));
}
}

System.out.println("订单编号:" + data.get("trackNums"));
return data;
}

private static void getHtml(String url, String filename, Map<String, String> data) throws Exception {

//创建一个客户端
DefaultHttpClient client = new DefaultHttpClient();

HttpResponse res = null;
if (data == null) {
//创建一个get方法
HttpGet get = new HttpGet(url);
//执行请求
res = client.execute(get);
} else {

client.setRedirectStrategy(new DefaultRedirectStrategy() {               
        public boolean isRedirected(HttpRequest request, HttpResponse response, HttpContext context)  {
            boolean isRedirect = false;
            try {
                isRedirect = super.isRedirected(request, response, context);
            } catch (ProtocolException e) {
                e.printStackTrace();
            }
            if (!isRedirect) {
                int responseCode = response.getStatusLine().getStatusCode();
                if (responseCode == 301 || responseCode == 302) {
                    return true;
                }
            }
            return isRedirect;
        }
    });

//作成post参数Entity
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
Iterator i = data.keySet().iterator();
while(i.hasNext()) {
String key = (String)i.next();
formparams.add(new BasicNameValuePair(key, data.get(key)));
}
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");

//创建一个post方法
HttpPost post = new HttpPost(url);
//设置post参数
post.setEntity(entity);

//执行请求
res = client.execute(post);
}

//获取完整的StatusLine・・・「HTTP/1.1 200 OK」
System.out.println(res.getStatusLine().toString());

//获取返回内容
if (res.getEntity() != null) {
String result = EntityUtils.toString(res.getEntity());
//System.out.println(result);
//生成HTML文件保存到本地(测试用可以不保存直接解析)
createHtmlFile(filename, result);
}

//关闭流
EntityUtils.consume(res.getEntity());

//关闭连接
client.getConnectionManager().shutdown();
}

private static void createHtmlFile(String filename, String data) throws Exception {
File file = new File(filename);
OutputStream os = new FileOutputStream(file);
os.write(data.getBytes("UTF-8"));
os.close();
}

private static String deleteSpace(String in) {
Pattern pattern = Pattern.compile("\\s*|\t|\r|\n");
    Matcher re = pattern.matcher(in);
   
    return re.replaceAll("");
}

}

抓取上面url中,查询结果汇总的信息  好像是我解析错了,求指导
2012年7月24日 14:54
目前还没有答案

相关推荐

    java网页抓取数据

    Java网页抓取数据是互联网数据挖掘的一个重要领域,它允许开发者通过编程方式获取网页上的信息,从而实现自动化分析、监控或构建智能应用。在Java中,我们通常使用HTTP客户端库和HTML解析工具来实现这一目标。本文将...

    java网页抓取demo

    Java网页抓取是一种技术,主要用于从互联网上自动提取或获取数据。这个"java网页抓取demo"项目提供了实现这一功能的实例代码。项目中的jar包是实现网页抓取的关键依赖库,包括Apache Commons Logging和HTTP Client。...

    Java网页抓取数据

    Java网页抓取数据是互联网开发中的一个重要技能,它允许开发者从网页中提取所需的信息,如新闻、产品数据或用户评论,以供进一步分析或利用。本主题主要涵盖以下几个关键知识点: 1. **网络请求库**:在Java中,...

    Java实现网页抓取

    在这个Java实现网页抓取的项目中,我们将探讨如何利用Java编程语言来抓取网页内容。下面将详细介绍这个过程涉及的关键知识点。 1. **网络基础知识**:首先,理解HTTP协议是必要的,它是互联网上应用最广泛的一种...

    java网页数据抓取源代码

    java抓取网页数据,主要用于抓取手机号和身份证查询网站的数据。

    java进行网页抓取

    java程序,能进行简单的网页抓取,及数据抓取,里面还有火车采集器的内容

    Java抓取网页数据Demo

    本文将详细讨论如何使用Java语言来抓取网页数据,包括两种主要方法:直接抓取原网页内容和处理网页中的JavaScript返回数据。 首先,让我们探讨**抓取原网页**的方法。在Java中,我们可以使用`java.net.URL`类来建立...

    Java抓取https网页数据

    Java抓取https网页数据,解决peer not authenticated异常。导入eclipse就能运行,带有所用的jar包(commons-httpclient-3.1.jar,commons-logging.jar,httpclient-4.2.5.jar,httpcore-4.2.4.jar)

    java抓取网页数据

    在“java抓取网页数据”这个主题中,我们将深入探讨如何利用Java来抓取并处理互联网上的信息。 首先,我们要了解什么是网络爬虫。网络爬虫(Web Crawler)是自动遍历互联网的程序,通过抓取网页内容并存储在本地,...

    java简单的抓取网页内容的程序

    java简单的抓取网页内容的程序java简单的抓取网页内容的程序java简单的抓取网页内容的程序java简单的抓取网页内容的程序java简单的抓取网页内容的程序java简单的抓取网页内容的程序java简单的抓取网页内容的程序java...

    java简单抓取网页内容

    在Java编程语言中,抓取网页内容是一项常见的任务,尤其对于...通过以上步骤,你可以在Java中实现简单的网页抓取。随着经验的积累,你可以逐渐掌握更复杂的技术,如数据存储、分布式爬虫等,进一步提升网页抓取的能力。

    java网页抓取Jsoup包全

    Java网页抓取是一个常见的任务,用于从网页上提取结构化数据,例如HTML文档中的文本、链接、图片等信息。在Java领域,Jsoup是一个非常流行的库,它提供了强大的功能来解析、操纵和提取HTML内容。Jsoup包全指的是包含...

    java抓取网页-java工具类

    java抓取网页java工具类java抓取网页java工具类

    Java抓取网页内容三种方式

    Java 抓取网页内容三种方式 Java 抓取网页内容是指使用 Java 语言从互联网上抓取网页内容的过程。抓取网页内容是数据爬虫和网络爬虫的基础,它广泛应用于数据挖掘、信息检索、机器学习等领域。本文将介绍使用 Java...

    java网络爬虫抓取网页数据

    Java网络爬虫是一种自动化程序,用于从互联网上抓取大量数据。它的工作原理是模拟浏览器发送HTTP请求到服务器,接收响应,并解析返回的HTML或XML文档以提取所需信息。在这个过程中,HttpClient是一个常用的Java库,...

    java爬虫抓取网页数据教程.pdf

    本文是一份关于使用Java语言进行网页数据抓取的教程,主要介绍了使用Apache HttpClient这个库来完成网络请求和数据获取的操作。Apache HttpClient是一个支持HTTP协议的客户端工具,被广泛应用于Java爬虫开发中,帮助...

    简单的java爬虫抓取网页实现代码

    简单Java爬虫,抓取网页内容,让你了解爬虫机制,熟悉网络编程

    java利用htmlparser抓取网页数据

    Java作为一种广泛应用的编程语言,提供了多种库来实现网页抓取。本篇将重点讲解如何利用HTMLParser库在Java中抓取网页数据。 HTMLParser是Java的一个开源库,专门用于解析HTML文档,提取其中的数据。它的设计目标是...

    java抓取任何指定网页的数据

    而Java作为一种广泛使用的编程语言,在网页抓取方面有着强大的功能。 #### Java抓取网页数据的实现方式 要实现Java抓取网页数据,我们需要关注以下几个关键点: 1. **确定目标URL**:明确需要抓取哪个网站的数据。...

    java抓取网站数据

    ### Java抓取网站数据知识点详解 #### 一、概述 在现代互联网开发中,抓取网站数据是一项重要的技能。无论是进行市场调研、竞品分析还是数据挖掘,掌握如何使用Java来抓取数据都是十分必要的。本篇文章将详细介绍...

Global site tag (gtag.js) - Google Analytics