- 浏览: 5826282 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (890)
- WindowsPhone (0)
- android (88)
- android快速迭代 (17)
- android基础 (34)
- android进阶 (172)
- android高级 (0)
- android拾遗 (85)
- android动画&效果 (68)
- Material Design (13)
- LUA (5)
- j2me (32)
- jQuery (39)
- spring (26)
- hibernate (20)
- struts (26)
- tomcat (9)
- javascript+css+html (62)
- jsp+servlet+javabean (14)
- java (37)
- velocity+FCKeditor (13)
- linux+批处理 (9)
- mysql (19)
- MyEclipse (9)
- ajax (7)
- wap (8)
- j2ee+apache (24)
- 其他 (13)
- phonegap (35)
最新评论
-
Memories_NC:
本地lua脚本终于执行成功了,虽然不是通过redis
java中调用lua脚本语言1 -
ZHOU452840622:
大神://处理返回的接收状态 这个好像没有监听到 遇 ...
android 发送短信的两种方式 -
PXY:
拦截部分地址,怎么写的for(int i=0;i<lis ...
判断是否登录的拦截器SessionFilter -
maotou1988:
Android控件之带清空按钮(功能)的AutoComplet ...
自定义AutoCompleteTextView -
yangmaolinpl:
希望有表例子更好。。。,不过也看明白了。
浅谈onInterceptTouchEvent、onTouchEvent与onTouch
我们有时要想把一个网站下一些有用的信息copy下来,比如下面的例子:想把http://www.ef360.com这个网站下所有的制衣企业拿下来并保存在自己的excel文件中,一个一个copy?受不了,那该怎么办呢?看下面基本源码
ExcelUtil 工具类,只是为了输出excel
下面是2个用到的包,可能还需要apache的commons-XXX.jar包
import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.methods.GetMethod; public class App { //需要分析的网站 public static final String LOGON_SITE="http://www.ef360.com"; public static final int LOGON_PORT=80; private static String[] desc=new String[]{ "公司介绍", "主营产品", "公司名称", "所在省市", "公司地址", "邮编", "联系人", "联系电话", "手机号码", "传真", "网址", "公司网址" }; private static String[] key=new String[]{ "companyInfo", "products", "companyName", "province", "address", "zipCode", "headerMan", "phone", "mobilePhone", "tax", "detailUrl", "netUrl" }; /** * 取到所有福建(350000)的厂家信息 * @param args */ public static void main(String[] args) { HttpClient client=new HttpClient(); client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT);//设置主机地址 //地区编号 String areaId="350000";//指福建 int pages=2;//需要取的页数,可以定的大一点 //已经添加的过滤 Map duclipcateCode=new HashMap(); //每行的结果 List resultList= new ArrayList(); System.out.println("=======开始链接,请等待...========"); long start=System.currentTimeMillis(); for(int i=1;i<pages;i++){//从第1页开始取,取到pages页结束 // 所有某个企业列表的链接,Province指地区,page指当前第几页 String baseUrl="http://company.ef360.com/CompanyList.asp?Province="+areaId+"&page="+i; //baseUrl+="&page="+i; GetMethod get=new GetMethod(baseUrl); get.getParams().setContentCharset("gb2312"); String resposeString=""; try { client.executeMethod(get); resposeString=get.getResponseBodyAsString(); get.releaseConnection(); } catch (HttpException e) { // TODO 自动生成 catch 块 e.printStackTrace(); } catch (IOException e) { // TODO 自动生成 catch 块 e.printStackTrace(); } // System.out.println("resposeString="+resposeString); //查找在这一页里面所有Detail/*.html这样的链接 Matcher m=Pattern.compile("Detail/.*html").matcher(resposeString); while(m.find()){ //取到201580.html这样的数字 Matcher m2=Pattern.compile("[0-9]+").matcher(m.group()); if(m2.find()){ String findCode=m2.group(); // System.out.println("findCode="+findCode); if(duclipcateCode.get(findCode)!=null){//重复的不要 continue; } duclipcateCode.put(findCode, findCode); //具体某个企业的链接 String detailUrl="http://company.ef360.com/Detail/"+findCode+".html"; Map result=new HashMap(); System.out.println("开始链接:"+detailUrl); GetMethod get2=new GetMethod(detailUrl); get2.getParams().setContentCharset("gb2312"); String content=""; try { client.executeMethod(get2); content=get2.getResponseBodyAsString();//获得链接数据 get2.releaseConnection(); } catch (HttpException e) { // TODO 自动生成 catch 块 e.printStackTrace(); } catch (IOException e) { // TODO 自动生成 catch 块 e.printStackTrace(); } // System.out.println("content="+content); //处理数据 String companyInfo=processDetail(content,"公司介绍</div>[\\s\\S]*CompanyTit_Body.*</div>","CompanyTit_Body",null,2,0); String products=processDetail(content,"主营产品</TD>[\\s\\S]*InnerContent_Search.*</TD>","InnerContent_Search","</TD>",3,0); String companyName=processDetail(content,"公司名称</TD>[\\s\\S]*InnerContent_Search.*</TD>","InnerContent_Search","</TD>",3,0); String province=processDetail(content,"所在省市</TD>[\\s\\S]*InnerContent_Search.*</TD>","InnerContent_Search","</TD>",3,0); String address=processDetail(content,"公司地址</TD>[\\s\\S]*InnerContent_Search.*</TD>","InnerContent_Search","</TD>",3,0); String zipCode=processDetail(content,"邮编</TD>[\\s\\S]*InnerContent_Search.*</TD>","InnerContent_Search","</TD>",3,0); String headerMan=processDetail(content,"联系人</TD>[\\s\\S]*InnerContent_Search.*</TD>","InnerContent_Search","</TD>",3,0); String phone=processDetail(content,"联系电话</TD>[\\s\\S]*InnerContent_Search.*</TD>","InnerContent_Search","</TD>",3,0); String mobilePhone=processDetail(content,"手机号码</TD>[\\s\\S]*InnerContent_Search.*</TD>","InnerContent_Search","</TD>",3,0); String tax=processDetail(content,"联系传真</TD>[\\s\\S]*InnerContent_Search.*</TD>","InnerContent_Search","</TD>",3,0); //String detailUrl=processDetail(content,"公司名称</TD>[\\s\\S]InnerContent_Search.*</TD>","InnerContent_Search","</TD>",3,0); String netUrl=processDetail(content,"公司网址</TD>[\\s\\S]*InnerContent_Search.*</TD>","InnerContent_Search","</TD>",3,0); result.put("companyInfo", companyInfo); result.put("products", products); result.put("companyName", companyName); result.put("province", province); result.put("address", address); result.put("zipCode", zipCode); result.put("headerMan", headerMan); result.put("phone", phone); result.put("mobilePhone", mobilePhone); result.put("tax", tax); result.put("detailUrl", detailUrl); result.put("netUrl", netUrl); resultList.add(result); } } } System.out.println("=======开始写入xls========"); ExcelUtil.exportExcel(key,desc,resultList,"D:/"); long end=System.currentTimeMillis(); System.out.println("执行结束,共花费时间:"+(end-start)/1000+"s"); } /** * 解析html * @param content * @param tex * @param startFlag * @param endFlag * @param starts * @param ends * @return */ public static String processDetail(String content,String tex,String startFlag,String endFlag,int starts,int ends){ Matcher m=Pattern.compile(tex).matcher(content); String tempStr=""; if(m.find()){ tempStr=m.group(); tempStr=tempStr.substring(tempStr.indexOf(startFlag)+startFlag.length()+starts, tempStr.length()-ends); if(endFlag!=null){ tempStr=tempStr.substring(0, tempStr.indexOf(endFlag)); } tempStr=tempStr.replaceAll("<br>", "\n"); tempStr=tempStr.replaceAll("<p>", "\n"); tempStr=tempStr.replaceAll("</TD>", ""); tempStr=tempStr.replaceAll("</div>", ""); tempStr=tempStr.replaceAll("</a>", ""); tempStr=tempStr.replaceAll("<a href=.*>", ""); } return tempStr; } }
ExcelUtil 工具类,只是为了输出excel
import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.HSSFColor; public class ExcelUtil { /** * * @param key 标题1 * @param desc 标题2 * @param list 数据 * @param path 保存路径 */ public static void exportExcel(String[] key,String[] desc,List list,String path){ //POIFSFileSystem fs; FileOutputStream out=null; // String fileName=new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss").format(new Date())+".xls"; String fileName="我的Excel.xls"; HSSFWorkbook workbook=new HSSFWorkbook(); HSSFSheet sheet=workbook.createSheet(); workbook.setSheetName(0, "信息",HSSFWorkbook.ENCODING_UTF_16); HSSFRow keyRow=sheet.createRow((short)0); HSSFRow descRow=sheet.createRow((short)1); keyRow.setHeight((short) 660);//设置行高 descRow.setHeight((short) 660); //设置字体样式啊什么的 HSSFCellStyle style=workbook.createCellStyle(); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); style.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index); HSSFFont font=workbook.createFont(); font.setColor(HSSFColor.RED.index); font.setFontHeight((short)260); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); style.setFont(font); for(int i=0;i<key.length;i++){ sheet.setColumnWidth((short)i,(short)5000);//设置各列列宽 //标题1 HSSFCell cell=keyRow.createCell((short) i); cell.setEncoding(HSSFCell.ENCODING_UTF_16);//解决Poi生成excel乱码 cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setCellStyle(style);//设置单元格样式 cell.setCellValue(key[i]); //标题2 HSSFCell cell2=descRow.createCell((short) i); cell2.setEncoding(HSSFCell.ENCODING_UTF_16);//解决Poi生成excel乱码 cell2.setCellType(HSSFCell.CELL_TYPE_STRING); cell2.setCellStyle(style);//设置单元格样式 cell2.setCellValue(desc[i]); // cell.setCellValue(new HSSFRichTextString(desc[i])); } //具体数据,list里存放的是HashMap for(int i=0;i<list.size();i++){ HashMap map=(HashMap)list.get(i); HSSFRow row=sheet.createRow((short)i+2);//第3行开始 for(int j=0;j<key.length;j++){//一行有多少列 HSSFCell cell=row.createCell((short) j); Object value=map.get(key[j]);//根据key取出对应的值 if(value==null) value=""; if(value instanceof Double || value instanceof Integer){ double d=Double.parseDouble(value.toString()); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC); cell.setCellValue(d); }else if(value instanceof String){ cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setCellValue(value.toString()); }else if(value instanceof Date){ String date=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(value); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setCellValue(date); }else{ // cell.setCellValue(new HSSFRichTextString(value)); // cell.setCellType(HSSFCell.CELL_TYPE_STRING); } } } try { out=new FileOutputStream(path+fileName); workbook.write(out); out.flush(); } catch (FileNotFoundException e) { // TODO 自动生成 catch 块 e.printStackTrace(); }catch (IOException e) { // TODO 自动生成 catch 块 e.printStackTrace(); }finally{ try { out.close(); } catch (IOException e) { // TODO 自动生成 catch 块 e.printStackTrace(); } } } }
下面是2个用到的包,可能还需要apache的commons-XXX.jar包
- commons-httpclient-3.1.jar (297.9 KB)
- 下载次数: 173
- poi-2.5.1.jar (783.4 KB)
- 下载次数: 143
发表评论
-
J2EE工具类:CalendarUtil .java
2010-08-11 19:51 2872package com.iwode.common; ... -
DESPlus+Base64+MD5Util
2010-07-14 09:03 3455//加密body字符串 DESPlus des = new D ... -
HtmlparseUtil.java
2010-07-02 17:08 7592该类并不是一个通用的工具类,需要按自己的要求实现,这里只记录了 ... -
J2EE工具类:ClientSocketUtil.java&ServerSocketConnection.java
2010-07-02 17:03 4857客户端: import java.io.*; impor ... -
J2EE工具类:WebClient.java
2010-07-02 16:42 4156import java.io.BufferedReader ... -
J2EE工具类:WebHttpClient.java
2010-07-02 16:39 2790import java.io.BufferedReader ... -
J2EE工具类:DES.java
2010-06-30 16:37 3749import java.security.Key; im ... -
BeanUtils & PropertyUtils & MethodUtils类使用方法
2010-03-10 12:37 19335一、简介: BeanUtils提供对 Java反射和自省AP ... -
HttpClient的用法
2010-03-01 17:13 20768http://www.diybl.com/course/3_p ... -
J2EE工具类:WeatherUtil.java
2010-01-13 21:11 2007package com.worthtech.app.uti ... -
Httpclient4.0 功能封装
2009-11-20 14:26 1638http://hc.apache.org/httpcompon ... -
apache commons-lang包
2009-11-20 13:01 2996http://commons.apache.org/lang/ ... -
J2EE工具类:ArrayUtil.java
2009-11-19 15:03 3208package com.worthtech.app.uti ... -
J2EE工具类:DataBaseUtil.java
2009-11-16 11:21 3353package com.worthtech.app.sql ... -
J2EE工具类:PropertiesUtil.java
2009-11-13 14:37 8044package com.worthtech.app.uti ... -
如何在首页加载数据?
2009-11-11 17:21 2730网站打开的第一页是index.jsp,但里面有些数据是从数据库 ... -
J2EE工具类:StringUtil.java
2009-10-19 17:40 3356package com.worthtech.app.uti ... -
J2EE工具类:DateUtil .java
2009-10-19 17:38 3823package com.worthtech.app.uti ... -
J2EE工具类:NumberUtil.java
2009-10-19 17:19 3190package com.worthtech.app.uti ... -
J2EE工具类:MoneyUtil.java小写钱转成大写钱
2009-10-19 17:09 3266package com.worthtech.app.uti ...
相关推荐
总之,HttpClient和HtmlParser结合使用,可以构建一个基础的网络爬虫,用于抓取和解析网页数据。它们提供了一种有效的方式,让开发者能够轻松地与Web服务器交互,并处理返回的HTML内容,从而实现各种Web数据挖掘和...
结合HttpClient和HtmlParser,可以构建一个简易的网络爬虫。该爬虫的基本逻辑包括: 1. **初始化HttpClient和HtmlParser实例:** 创建HttpClient和HtmlParser对象。 2. **发起HTTP请求:** 使用HttpClient发起...
本教程将聚焦于如何使用HTMLPARSER和HTTPCLIENT库来构建一个基础的网络爬虫。这两个工具是Java开发者常用来解析HTML和进行HTTP请求的重要库。 首先,HTMLPARSER是一个开源的Java库,它可以解析HTML文档并提供类似于...
在构建网络爬虫时,HttpClient 是一个必不可少的工具。它允许爬虫模拟浏览器行为,通过设置User-Agent、Cookies和其他请求头,避免被网站识别为机器人。HttpClient 还支持多线程处理,这对于大规模爬取网页数据非常...
HttpClient是一个广泛使用的Java库,专为处理HTTP协议而设计,尤其在开发网络爬虫时扮演着核心角色。本篇文章将深入探讨HttpClient库以及与其相关的HTMLParser,帮助你更好地理解和应用这些工具来构建高效的网络爬虫...
本示例提供了一个简单的网络爬虫程序,其中包含了HTTPClient包,这是一个广泛使用的Java库,用于处理HTTP协议的请求和响应。下面将详细讨论网络爬虫的基本原理以及HTTPClient包在爬虫中的作用。 首先,网络爬虫...
下面是一个使用 HttpClient 获取网页内容的例子: ```java import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; ...
【简易Java网络爬虫】是一种基于Java编程语言实现的简单网络数据抓取工具,主要用于从趣配音的web页面上获取信息。在这个项目中,我们将会探讨如何构建一个基础的网络爬虫,涉及到的关键技术包括HTTP请求、HTML解析...
在Java编程环境中,开发一个简单的网络爬虫是通过结合使用HttpClient库进行网络请求以及HtmlParser库解析HTML内容来实现的。HttpClient是一个强大的HTTP客户端库,它允许开发者发送各种HTTP请求并接收响应,而...
网络爬虫,用httpclient,httpparse实现。httpclient用于下载爬取数据到本地,httpparse用于解析爬取的数据。采用深度优先爬取策略。一共有五个类,比较重要的类都有自己的测试代码。代码清晰可读性强,注释比较全。...
这个“HTTPClient的一个封装”显然指的是对Apache HttpClient库进行了定制化处理,以适应特定项目需求或者简化API使用。下面将详细讨论HttpClient的核心概念、封装的目的以及可能实现的方式。 HttpClient是Apache...
它涵盖了网络爬虫的基本架构和常用技术,通过实践,初学者可以逐步掌握如何构建一个完整的爬虫系统。随着经验的增长,可以逐渐引入更复杂的技术,如分布式爬虫、JavaScript渲染等,以应对更复杂的爬取需求。
综上所述,这个Java项目是一个利用SSM框架构建的Web应用,结合Maven进行项目管理,通过HttpClient发起网络请求并使用jsoup解析HTML,实现了一个能够爬取小说网站的功能。这样的项目对于学习和理解Java Web开发、网络...
在IT领域,网络爬虫是一种自动化程序,用于从互联网上抓取信息,是数据分析和信息检索的重要工具。本文将详细探讨使用Java中的两种库——HttpClient和Jsoup,以及它们结合使用来构建网页爬虫的方法。 HttpClient是...
这是我信息检索课的课程作业。 代码注释很详细。绝对可以运行。我爬得是 搜狐 的网页。...这是一个基于java的多线程的网络爬虫。 包含了 必须使用包括 httpclient 的 4个jar包. 另外有问题欢迎交流。站内。你懂得。
结合HttpClient和HtmlParser,可以创建一个简单的网络爬虫。首先,HttpClient 用于发送HTTP请求并获取网页内容。然后,HtmlParser 解析这些内容,找出页面中的链接或其他感兴趣的元素。这个过程可以递归进行,以爬取...