- 浏览: 1505306 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (798)
- struts2 (42)
- servlet (20)
- quartz (4)
- jquery & ajax (24)
- tomcat (5)
- javascript (15)
- struts1 (8)
- 搜索关键字及链接 (3)
- fckeditor (3)
- Apache (5)
- spring (22)
- linux (3)
- 企业应用 (8)
- 综合应用 (13)
- 服务器 (2)
- 数据库 (85)
- 性能调优 (21)
- 网络应用 (15)
- 缓存技术 (8)
- 设计模式 (39)
- 面试题 (7)
- 程序人生&前辈程序员 (29)
- java基础 (59)
- hibernate (75)
- log4j (4)
- http (11)
- 架构设计 (28)
- 网页设计 (12)
- java邮件 (4)
- 相关工具 (11)
- ognl (7)
- 工作笔记 (18)
- 知识面扩展 (12)
- oracle异常 (1)
- 正则表达式 (2)
- java异常 (5)
- 项目实践&管理 (1)
- 专业术语 (11)
- 网站参考 (1)
- 论坛话题 (2)
- web应用 (11)
- cxf&webservice (22)
- freemarker (3)
- 开源项目 (9)
- eos (1)
- ibatis (6)
- 自定义标签 (3)
- jsp (3)
- 内部非公开文档(注意:保存为草稿) (0)
- 国内外知名企业 (2)
- 网店 (3)
- 分页 (1)
- 消费者习惯 (2)
- 每日关注 (1)
- 商业信息 (18)
- 关注商业网站 (1)
- 生活常识 (3)
- 新闻 (2)
- xml&JSON (5)
- solaris (1)
- apache.common (3)
- BLOB/CLOB (1)
- lucene (2)
- JMS (14)
- 社会进程 (8)
- SSH扩展 (2)
- 消费心理 (1)
- 珠三角 (1)
- 设计文档 (1)
- XWork&webwork (1)
- 软件工程 (3)
- 数据库及链接 (1)
- RMI (2)
- 国内外知名企业&人物 (1)
最新评论
-
司c马:
简介易懂、
OutputStream和InputStream的区别 -
在世界的中心呼喚愛:
解决我的问题
Java获取客户端的真实IP地址 -
bo_hai:
都是些基本的概念呀!
SSO -
tian_4238:
哥们,你也是搞水利这块的吧。
巧用SQLQuery中的addScalar -
loveEVERYday:
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结
/*
* Created on 2009-10-12
* Copyright 2009 by www.xfok.net. All Rights Reserved
*
*/
package test;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
/**
* @author YangHua 转载请注明出处:http://www.xfok.net/2009/10/124488.html
*/
public class MyClient {
/**
* 的到Http请求结果
*
* @param url请求地址
* @param parms请求参数
* @return
*/
public byte[] getBody(String url, Map parms) {
byte[] body = null;
// 构造HttpClient的实例
HttpClient httpClient = new HttpClient();
// 创建post方法的实例
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 = httpClient.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();
System.out
.println("The page was redirected to:" + location);
} else {
System.err.println("Location field value is null.");
}
}
body = postMethod.getResponseBody();
} catch (Exception e) {
e.printStackTrace();
}
return body;
}
public static void main(String[] args) {
String url = "http://www.canobd2.com/TechInfo/DlcLocator.aspx";
// 数组:所有车系
String[] makes = { "Acura", "Audi", "BMW", "Buick", "Cadillac",
"Chevrolet", "Chrysler", "Daewoo", "Dodge", "Eagle", "Ford",
"Geo", "GMC", "Honda", "Hummer", "Hyundai", "Infiniti",
"Isuzu", "Jaguar", "Jeep", "Kia", "Land Rover", "Lexus",
"Lincoln", "Mazda", "Mercedes-Benz", "Mercury", "MINI",
"Mitsubishi", "Nissan", "Oldsmobile", "Plymouth", "Pontiac",
"Porsche", "Saab", "Saturn", "Scion", "Smart", "Subaru",
"Suzuki", "Toyota", "Volkswagen", "Volvo" };
// 数组:所有年款
String[] years = { "2010", "2009", "2008", "2007", "2006", "2005",
"2004", "2003", "2002", "2001", "2000", "1999", "1998", "1997",
"1996" };
Map parms1 = new HashMap();
MyClient client = new MyClient();
parms1.put("submitButton", "Submit");
parms1.put("__EVENTARGUMENT", "");
parms1.put("__sx", "0");
parms1
.put(
"__VIEWSTATE",
"/wEPDwUKMTQzMzU1MTQxOA8WBB4OX19QcmV2aW91c1BhZ2VlHgtfX1JldHVyblVybAUZL1RlY2hJbmZvL0RsY0xvY2F0b3IuYXNweBYCAgEPZBYIZg9kFgZmDxYCHgVzdHlsZQUNZGlzcGxheTpub25lO2QCAg8WAh4HVmlzaWJsZWdkAgMPFgIfA2hkAgIPFCsAAWRkAgMPFCsAAWRkAgQPFCsAAWRkZLivoIUw0bAn8SSzCNO/mKrSXsQ/");
parms1.put("__sy", "167");
FileOutputStream fos = null;
PrintWriter pw = null;
// 将拼装的数据写到文件中去,方便批量插入数据库
try {
try {
File file = new File("D://dlc.txt");
fos = new FileOutputStream(file);
pw = new PrintWriter(fos);
Date startTime = new Date();
for (int i = 0; i < makes.length; i++) {
parms1.put("dlcMake", makes[i]);
for (int j = 0; j < years.length; j++) {
parms1.put("dlcYear", years[j]);
parms1.put("__EVENTTARGET", "dlcYear");
// 根据车系、年款查出车型
String result2 = new String(client.getBody(url, parms1));
// 处理result2数据,提炼出车型数组
// 数据格式形如:1window['dlcModel_jsobject'].UpdateOptions(new
// Array({Value:'',Text:'Select...',Selected:'true'}));
// 取Value:''里的值
//System.out.println("result2: " + result2);
String[] result2split = result2.split("\\{");// 以“{”分割
// 以“{”分割的字符串的个数
int length = result2split.length;
int firstIndex = 0;
int secondIndex = 0;
int thirdIndex = 0;
// 根据数据格式,以”{“分割后,第二个Value为空,从分割后的第三个字符串开始
if (length > 2) {
String[] models = new String[length - 2];
for (int k = 2; k < length; k++) {
firstIndex = result2split[k].indexOf("Value:'");
secondIndex = firstIndex + 7;
thirdIndex = result2split[k].indexOf("'",
secondIndex);
models[k - 2] = result2split[k].substring(
secondIndex, thirdIndex);
// System.out.println("make1: " + makes[i]
// + ", year1: " + years[j] + ", model1: "
// + models[k - 2]);
}
parms1.put("__EVENTTARGET", "ajaxSubmitButton");
parms1.put("__sy", "204");
for (int m = 0; m < models.length; m++) {
parms1.put("dlcModel", models[m]);
// 根据车系、年款、车型查汽车诊断座位置
String result3 = new String(client.getBody(url,
parms1));
// System.out.println("make: " + makes[i]
// + ", year: " + years[j] + ", model: "
// + models[m]);
//System.out.println("result3: " + result3);
String result3split[] = result3.split("\"");
// for(String str:result3split)
// System.out.println(str);
// System.out.println(makes[i] + "@" + years[j]
// + "@" + models[m] + "@"
// + result3split[5] + "@"
// + result3split[7] + "@"
// + result3split[9] + "@"
// + result3split[11]);// 6 8 10 12
String ret = models[m] + "@" + models[m] + "@" +"15" + "@"
+ makes[i] + "@" +years[j]
+ "@" + result3split[7] + "@"
+ result3split[9] + "@"
+ result3split[11]+"@!";
pw.println(ret);
pw.flush();
}
}
}
}
Date endTime = new Date();
long time = endTime.getTime() -startTime.getTime();
System.out.println("------------------get data over--------------used time:"+time);
} finally {
if (fos != null) {
fos.close();
}
if (pw != null) {
pw.close();
}
}
} catch (Exception e) {
// TODO: handle exception
}
}
}
发表评论
-
Java获取客户端的真实IP地址
2011-01-04 15:16 34028像移动网关一样,iisforward这个ISAPI过滤器也会对 ... -
Nginx做负载均衡时X-Forwarded-For信息头的处理
2011-01-04 15:14 5760如今利用nginx做负载均 ... -
HTTP协议详解---持久连接与非持久连接
2010-11-16 19:45 4472最近写作完HTTP协议一节,略做总结:非持久连接是在http ... -
12334445555
2010-08-23 21:29 1418package test; /* * Created ... -
相关知识
2010-08-11 10:30 12071、网页内嵌pdf,前提是保证该浏览器安装了pdf插件,否则无 ... -
response.setHeader()的用法
2010-08-11 09:52 1745response.setHeader()下载中 ... -
response.setHeader参数、用法的介绍
2010-08-11 09:32 1408response.setHeader 是用来设 ... -
commons.httpclient.HttpMethodDirector java.net.SocketException: Connection reset
2010-07-29 11:32 2770httpClient使用过程中的问题: http:// ... -
利用htmlparser抓取网页内容
2010-07-07 10:36 1751import org.htmlparser.Node;impo ... -
JAVA实现httpClient实例
2010-07-07 09:52 1283/* * Created on 2009-10-12 ...
相关推荐
### Java抓取网站数据知识点详解 #### 一、概述 在现代互联网开发中,抓取网站数据是一项重要的技能。无论是进行市场调研、竞品分析还是数据挖掘,掌握如何使用Java来抓取数据都是十分必要的。本篇文章将详细介绍...
机器人视觉抓取数据集Jacquard V2是一个广泛用于机器人学习和计算机视觉研究的重要资源,尤其在物体识别、抓取规划以及深度学习算法的训练中起到关键作用。这个数据集包含了大量的图像和相应的标注信息,旨在帮助...
### 网站的数据抓取步骤 在当前互联网时代,数据抓取技术变得越来越重要,尤其是在需要自动收集网络上的信息时。本篇文章将基于提供的标题、描述、标签以及部分内容,详细解析网站数据抓取的基本步骤及其相关的技术...
标题中的“抓取中国招标网数据源码”指的是一个C#编程项目,目的是自动化地从中国招标网这个网站上获取相关的招标信息。这样的程序通常利用网络爬虫技术,通过解析HTML网页来提取需要的数据。 首先,我们要理解数据...
2. **SQL.CONFIG**:这可能是用于存储数据库连接信息的文件,数据抓取程序可能将抓取到的数据存储在SQL数据库中,以便后续分析。 3. **Form1.cs**:这是Windows Forms应用程序的主要界面类,可能包含用户界面的设计...
在本文中,我们将深入探讨如何使用C#语言来抓取网页数据,特别是在彩票数据查询方面的应用。C#是一种广泛用于开发Windows应用程序、Web服务以及游戏的面向对象的编程语言,其丰富的类库和强大的功能使其成为数据抓取...
在IT行业中,Web程序抓取是一项常见的任务,用于自动化地从网站上收集和处理数据。这个过程涉及到多个技术环节,包括网络请求、HTML解析、数据提取以及数据存储。以下是对这些知识点的详细解释: 1. **网络请求**:...
亚马逊爬虫抓取商品信息并数据分析.zip亚马逊爬虫抓取商品信息并数据分析.zip亚马逊爬虫抓取商品信息并数据分析.zip亚马逊爬虫抓取商品信息并数据分析.zip亚马逊爬虫抓取商品信息并数据分析.zip亚马逊爬虫抓取商品...
标题中的"C#抓取网页股票年报数据程序源代码"指的是一个使用C#编程语言开发的软件应用程序,其主要功能是从互联网上的网页中抓取股票年报的相关数据。在信息技术领域,这种程序通常被称为网络爬虫或者网页抓取工具,...
抓取G529数据中...完成! 抓取G1204数据中...完成! 抓取G279数据中...完成! 抓取G276数据中...完成! 抓取G1022数据中...完成! 抓取G280数据中...完成! 抓取G1206数据中...完成! 抓取G1224数据中...完成! 抓取G818数据...
例如,测试人员可能需要抓取数据以验证服务功能,数据分析师则可能希望获取特定的网站数据进行研究。 9. **学习资源** - 要深入学习AMF和Flex抓取,可以参考Adobe官方文档,以及各种在线教程和论坛,如Stack ...
智能抓取沙箱的抓取数据集 数据说明: 在Shadow Robot,我们是机器人抓取和操作的领导者。作为智能抓取系统开发的一部分,我们正在使用机器学习开发不同的算法。 这个第一个公共数据集的创建是为了研究使用机器学习...
值得注意的是,虽然网页抓取提供了获取大量公开数据的途径,但必须遵守网站的Robots协议,尊重网站的版权,避免对服务器造成过大的访问压力,否则可能会导致IP被封禁。此外,随着网站动态加载和反爬虫技术的发展,...
2. **Cap.exe**:可执行文件,可能是一个命令行工具或者图形用户界面的应用程序,用于启动和控制网络数据的抓取过程。它可以调用 `Hook.dll` 中的函数来实现实际的网络监控功能。 综上所述,这个工具可能的工作流程...
本项目名为“指定网站数据抓取”,其主要目标是通过编程方式从指定的网站上获取所需的数据。这里我们将深入探讨这个项目涉及到的知识点,包括数据抓取的基本原理、ASP.Net框架的应用以及C#语言的使用。 首先,我们...
以上是Java网页抓取数据的基本知识框架,实践中还需要根据具体需求和目标网站的特点进行灵活调整。`WebpageCaptureDemo`可能是一个示例项目,包含了上述部分或全部技术的应用,通过阅读和学习这个示例,可以更好地...
"自动抓取yahoo股票数据软件"是这样一个工具,它能够高效地从Yahoo Finance和MSN Money这样的金融网站获取实时或历史的股票数据,以及公司的财务报告如资产负债表等关键信息。 首先,我们来了解一下"抓取股票数据...
2. **深度抓取**:通过设置抓取深度,Teleport Pro 可以追踪链接到的页面,不仅限于首页,而是深入到网站的各个层级,确保抓取到所有相关的内容。 3. **定制抓取规则**:用户可以根据需要设定过滤规则,比如只抓取...
### 网络抓扒手:抓取别人网站的数据(源码实例) #### 1. 网络抓取技术 网络抓取,也被称为网页爬虫或Web Scraping,是一种自动化地从互联网上获取信息的技术。通常用于大规模地收集公开的网页数据,如新闻、商品...
kettle数据抓取操作手册 kettle是一款功能强大的数据抓取和ETL(Extract, Transform, Load)工具,广泛应用于数据仓库、数据挖掘和数据分析领域。本手册将指导用户如何使用kettle进行数据抓取操作,包括连接数据库...