最近 老有人 要我抓取页面的数据, 大部分人是要客户资料开发新的客户, 但对不了解coding 的人, 是要一个一个 的复制 ,粘贴,所以很浪费时间, 做 了个简单但demo ,用Httpclient ,jousp ,poi。
public class GetHouseData {
public final static String BASE_URL="http://example.com";
public static void main(String[] args) {
//第一页到第三页
getHoustInfoLink(3);
}
/**
*
* @param n 第一页到第n页
*/
public static void getHoustInfoLink(int n) {
DefaultHttpClient httpclient = new DefaultHttpClient();
Workbook wb = new HSSFWorkbook();
try {
HttpRequestRetryHandler myRetryHandler = new HttpRequestRetryHandler() {
public boolean retryRequest(IOException exception, int executionCount,
HttpContext context) {
System.out.println("尝试连接次数:-------:" + executionCount);
if (executionCount >= 5) {
// 如果超过最大重试次数,那么就不要继续了
return false;
}
if (exception instanceof NoHttpResponseException) {
// 如果服务器丢掉了连接,那么就重试
return true;
}
if (exception instanceof SSLHandshakeException) {
// 不要重试SSL握手异常
return false;
}
HttpRequest request = (HttpRequest) context
.getAttribute(ExecutionContext.HTTP_REQUEST);
boolean idempotent = !(request instanceof HttpEntityEnclosingRequest);
if (idempotent) {
// 如果请求被认为是幂等的,那么就重试
return true;
}
return false;
}
};
for(int pageIndex =1;pageIndex<=n;pageIndex++){
httpclient.setHttpRequestRetryHandler(myRetryHandler);
List<NameValuePair> formparams = new
ArrayList<NameValuePair>();
formparams.add(new BasicNameValuePair("__EVENTARGUMENT", String.valueOf(pageIndex)));
formparams.add(new BasicNameValuePair("__EVENTTARGET", "AspNetPager1"));
formparams.add(new BasicNameValuePair("ddlistOrder", "1"));
UrlEncodedFormEntity urlEntity = new UrlEncodedFormEntity(formparams, "UTF-8");
HttpPost httppost = new HttpPost("BASE_URL");
httppost.setEntity(urlEntity);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = httpclient.execute(httppost, responseHandler);
Document doc = Jsoup.parse(responseBody);
Elements elements = doc.select(".modou .k2 .leb_mod");
JSONArray arr = new JSONArray();
for(int i =0 ;i<elements.size();i++){
JSONObject obj = new JSONObject();
Element element = elements.get(i);
//楼盘图片地址
String imgURL= element.select(".mod_1 img").attr("src");
//楼盘名称
String houstName = element.select(".mod_2 .zuti .a1").text();
//楼盘价格
String price = element.select(".mod_2 .zuti .b1").text();
//更新时间
String updatedTime = element.select(".mod_2 .zuti .c1").text();
//销售电话
String sellPhone = element.select(".mod_2 .dizi .a1 span").text();
element.select(".mod_2 .dizi .b1 span").remove();
String houstDeveloper = element.select(".mod_2 .dizi .b1").eq(0).text();
String address = element.select(".mod_2 .dizi .b1").eq(1).text();
obj.put("imgURL", imgURL);
obj.put("houstName", houstName);
obj.put("price", price);
obj.put("updatedTime", updatedTime);
obj.put("sellPhone", sellPhone);
obj.put("houstDeveloper", houstDeveloper);
obj.put("address", address);
arr.add(obj);
}
//Workbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet("HouseList-page-"+pageIndex);
// Create a new font and alter it.
Font font = wb.createFont();
font.setFontName("Times New Roman");
CellStyle style = wb.createCellStyle();
style.setFont(font);
int i =0;
for (Object object : arr) {
object =arr.get(i);
JSONObject js =(JSONObject) object;
Row row = sheet.createRow((short)i);
Cell cell0 = row.createCell(0);
Cell cell1 = row.createCell(1);
Cell cell2 = row.createCell(2);
Cell cell3 = row.createCell(3);
Cell cell4 = row.createCell(4);
Cell cell5 = row.createCell(5);
Cell cell6 = row.createCell(6);
cell0.setCellStyle(style);
cell0.setCellValue(js.get("imgURL").toString());
cell1.setCellStyle(style);
cell1.setCellValue(js.get("houstName").toString());
cell2.setCellValue(js.get("price").toString());
cell3.setCellValue(js.get("updatedTime").toString());
cell4.setCellValue(js.get("sellPhone").toString());
cell5.setCellValue(js.get("houstDeveloper").toString());
cell6.setCellValue(js.get("address").toString());
i++;
}
System.out.println("--导入中...........页面:第"+pageIndex+"页");
//睡眠一秒
Thread.sleep(1000);
}
FileOutputStream fileOut = new FileOutputStream("house-"+System.currentTimeMillis()+".xls");
wb.write(fileOut);
fileOut.close();
// System.out.println(elements.html());
// Struts2Utils.getResponse().setCharacterEncoding("UTF-8");
} catch (Exception e) {
e.printStackTrace();
} finally {
httpclient.getConnectionManager().shutdown();
}
}
}
分享到:
相关推荐
在本篇文章中,我们将深入探讨如何使用Java HttpClient来抓取网页数据以及如何打包成jar文件。 **一、Java HttpClient简介** Java HttpClient 是 Apache HttpClient 库的一部分,它提供了丰富的功能,包括连接管理...
在本文中,我们将深入探讨HttpClient的基本用法,以及如何使用它来抓取网页内容。 首先,你需要在项目中引入HttpClient的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org....
本教程将详细介绍如何结合使用HttpClient与Jsoup来抓取和处理网页数据。 HttpClient是Apache基金会开发的一个开放源代码库,它允许开发者发送HTTP请求并接收响应,支持多种HTTP协议版本。HttpClient提供了丰富的...
在"网易贵金属"的例子中,你可能需要使用HttpClient发送GET请求到网易贵金属的页面,然后使用Jsoup解析返回的HTML,找到包含贵金属价格、新闻等信息的部分,从而实现数据抓取。实际操作时,可能还需要考虑登录、分页...
本篇文章将详细介绍如何使用HttpClient库抓取网页数据,并讨论与之相关的10个关键jar包。 HttpClient库提供了丰富的API,可以方便地执行GET、POST和其他HTTP方法,设置请求头,管理Cookie,处理重定向,以及进行...
在本教程中,我们将探讨如何使用WebMagic来抓取网页数据并将其导出到Excel文件中。 首先,让我们了解WebMagic的基本架构。WebMagic主要由四个组件构成:`Seeder`(种子生成器)、`PageProcessor`(页面处理器)、`...
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)
6. **数据存储**:抓取到的彩票数据可能需要保存在本地或远程数据库中,以便后续分析。可以使用Entity Framework与SQL Server或其他数据库进行交互,或者选择NoSQL数据库如MongoDB。 7. **多线程/异步编程**:为了...
在IT行业中,基于httpClient的文件编码导入系统是一个常见的应用场景,主要涉及到网络通信和数据处理两个核心领域。HttpClient是Apache开源组织提供的一款强大的HTTP客户端库,它允许开发者在Java环境中发送HTTP请求...
通过分析这些请求,开发者可以找到数据接口,并使用HttpClient来模拟这些请求,获取到动态加载的数据。 在本例中,我们通过Jsoup获取到了京东商品页面的静态HTML代码,但价格信息并未包含在内。通过分析页面源码...
Jsoup+httpclient模拟登陆和抓取页面.pdf
对于POST请求,我们通常用来提交数据到服务器,例如创建新的资源或更新已有资源。 要使用HttpClient发送JSON数据,你需要以下步骤: 1. **创建HttpClient实例**:首先,你需要创建一个HttpClient对象,这是发送...
httpclient上传数据,通过httpclient在Android上实现上传数据
HttpClient 绕过登录验证码直接抓取内部数据 HttpClient 的 Cookie 处理机制 在 web 安全中,Cookie 是一个非常重要的概念。它是服务器端用于标识用户身份的机制,通过 Cookie,服务器可以记住用户的登录信息,...
163邮箱登录可能涉及到HTTP表单认证,HttpClient支持`HttpAuthenticationScheme`,如`BasicScheme`和`DigestScheme`。 5. **解析HTML页面** 在登录过程中,可能需要解析返回的HTML页面以获取验证码或提取其他动态...
本教程将重点关注如何利用Asp.NET进行数据抓取并生成静态页面,这在提升网站性能、减轻服务器负担以及搜索引擎优化(SEO)等方面具有显著优势。 首先,我们来理解“数据抓取”这一概念。数据抓取是指从互联网上的...
在抓取数据的过程中,我们还需要处理可能出现的反爬虫策略,比如验证码、IP限制、User-Agent检测等。有时,我们需要设置合适的User-Agent字符串,或者使用代理IP来绕过这些限制。 此外,为了确保爬虫的可扩展性和...
本篇将详细讲解如何使用`HttpClient`进行异步请求数据,并结合Android的`AsyncTask`来处理后台任务,避免阻塞UI线程。 首先,理解`HttpClient`的基本使用方法。`HttpClient`包含几个关键组件,如`HttpClient`实例、...
- HttpClient常用于网页抓取,配合HTML解析库(如Jsoup)可以提取网页数据。 - 在自动化测试中,模拟用户请求以验证服务器端功能。 在实际使用中,HttpClient的灵活性和强大功能使其成为Java开发者的首选HTTP...