`
xpopi
  • 浏览: 62629 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

httpclient 抓取页面数据导入到Excel

 
阅读更多

最近 老有人 要我抓取页面的数据, 大部分人是要客户资料开发新的客户, 但对不了解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来抓取网页数据以及如何打包成jar文件。 **一、Java HttpClient简介** Java HttpClient 是 Apache HttpClient 库的一部分,它提供了丰富的功能,包括连接管理...

    HttpClient抓取网页Demo

    在本文中,我们将深入探讨HttpClient的基本用法,以及如何使用它来抓取网页内容。 首先,你需要在项目中引入HttpClient的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org....

    httpClient+jsoup抓取网页数据实例和jar包

    本教程将详细介绍如何结合使用HttpClient与Jsoup来抓取和处理网页数据。 HttpClient是Apache基金会开发的一个开放源代码库,它允许开发者发送HTTP请求并接收响应,支持多种HTTP协议版本。HttpClient提供了丰富的...

    httpClient+jsoup 抓取网页数据

    在"网易贵金属"的例子中,你可能需要使用HttpClient发送GET请求到网易贵金属的页面,然后使用Jsoup解析返回的HTML,找到包含贵金属价格、新闻等信息的部分,从而实现数据抓取。实际操作时,可能还需要考虑登录、分页...

    httpclient抓取网页数据和所需的10个jar包

    本篇文章将详细介绍如何使用HttpClient库抓取网页数据,并讨论与之相关的10个关键jar包。 HttpClient库提供了丰富的API,可以方便地执行GET、POST和其他HTTP方法,设置请求头,管理Cookie,处理重定向,以及进行...

    WebMagic(Java)简单爬虫实现,实现抓取数据,并导出到excel文件

    在本教程中,我们将探讨如何使用WebMagic来抓取网页数据并将其导出到Excel文件中。 首先,让我们了解WebMagic的基本架构。WebMagic主要由四个组件构成:`Seeder`(种子生成器)、`PageProcessor`(页面处理器)、`...

    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)

    C#抓取网页数据,彩票数据查询

    6. **数据存储**:抓取到的彩票数据可能需要保存在本地或远程数据库中,以便后续分析。可以使用Entity Framework与SQL Server或其他数据库进行交互,或者选择NoSQL数据库如MongoDB。 7. **多线程/异步编程**:为了...

    基于httpClient的文件编码导入系统

    在IT行业中,基于httpClient的文件编码导入系统是一个常见的应用场景,主要涉及到网络通信和数据处理两个核心领域。HttpClient是Apache开源组织提供的一款强大的HTTP客户端库,它允许开发者在Java环境中发送HTTP请求...

    Java爬虫Jsoup+httpclient获取动态生成的数据

    通过分析这些请求,开发者可以找到数据接口,并使用HttpClient来模拟这些请求,获取到动态加载的数据。 在本例中,我们通过Jsoup获取到了京东商品页面的静态HTML代码,但价格信息并未包含在内。通过分析页面源码...

    Jsoup+httpclient模拟登陆和抓取页面.pdf

    Jsoup+httpclient模拟登陆和抓取页面.pdf

    httpclient post json 数据

    对于POST请求,我们通常用来提交数据到服务器,例如创建新的资源或更新已有资源。 要使用HttpClient发送JSON数据,你需要以下步骤: 1. **创建HttpClient实例**:首先,你需要创建一个HttpClient对象,这是发送...

    采用httpclient上传数据

    httpclient上传数据,通过httpclient在Android上实现上传数据

    httpclient绕过登陆验证码直接抓取内部数据

    HttpClient 绕过登录验证码直接抓取内部数据 HttpClient 的 Cookie 处理机制 在 web 安全中,Cookie 是一个非常重要的概念。它是服务器端用于标识用户身份的机制,通过 Cookie,服务器可以记住用户的登录信息,...

    HttpClient 登录163邮箱

    163邮箱登录可能涉及到HTTP表单认证,HttpClient支持`HttpAuthenticationScheme`,如`BasicScheme`和`DigestScheme`。 5. **解析HTML页面** 在登录过程中,可能需要解析返回的HTML页面以获取验证码或提取其他动态...

    asp.net 远程抓取数据生成静态页面Demo

    本教程将重点关注如何利用Asp.NET进行数据抓取并生成静态页面,这在提升网站性能、减轻服务器负担以及搜索引擎优化(SEO)等方面具有显著优势。 首先,我们来理解“数据抓取”这一概念。数据抓取是指从互联网上的...

    java抓取网页数据

    在抓取数据的过程中,我们还需要处理可能出现的反爬虫策略,比如验证码、IP限制、User-Agent检测等。有时,我们需要设置合适的User-Agent字符串,或者使用代理IP来绕过这些限制。 此外,为了确保爬虫的可扩展性和...

    使用HttpClient异步请求数据

    本篇将详细讲解如何使用`HttpClient`进行异步请求数据,并结合Android的`AsyncTask`来处理后台任务,避免阻塞UI线程。 首先,理解`HttpClient`的基本使用方法。`HttpClient`包含几个关键组件,如`HttpClient`实例、...

    HttpClient网页抓取工具包整合

    - HttpClient常用于网页抓取,配合HTML解析库(如Jsoup)可以提取网页数据。 - 在自动化测试中,模拟用户请求以验证服务器端功能。 在实际使用中,HttpClient的灵活性和强大功能使其成为Java开发者的首选HTTP...

Global site tag (gtag.js) - Google Analytics