- 浏览: 168987 次
- 性别:
- 来自: 武汉
文章分类
最新评论
现在以https://www.mann-hummel.com/mf_prodkata_china/index.html?ktlg_page=1&ktlg_lang=16&ktlg_01_fzart=1为例
抓取这个站点的汽车信息
1、设置得到信息的的汽车对象类
package com.xiang; import java.util.List; public class CarInfo { // private String manufacturer; // private String serieliaze; // private String model; // private String enginCode; // private String kilowatt; // private String horsepower; // private String makeTime; List<String> car; public List<String> getCar() { return car; } public void setCar(List<String> car) { this.car = car; } }
2、设置目录的类(包括子目录与父目录的关系)
package com.xiang; import java.util.List; public class CategoryAnther { private String id; private String name; private List<CategoryAnther> categoryAnther; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<CategoryAnther> getCategoryAnther() { return categoryAnther; } public void setCategoryAnther(List<CategoryAnther> categoryAnther) { this.categoryAnther = categoryAnther; } }
3、主程序抓取
package com.xiang; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.cyberneko.html.parsers.DOMParser; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.xml.sax.InputSource; import org.htmlparser.NodeFilter; import org.htmlparser.Parser; import org.htmlparser.filters.HasAttributeFilter; import org.htmlparser.tags.TableRow; import org.htmlparser.tags.OptionTag; import org.htmlparser.tags.TableColumn; import org.htmlparser.tags.LinkTag; import org.htmlparser.util.NodeList; import org.htmlparser.util.ParserException; public class ExportInfo { /** * @param args **/ public static void main(String[] args) { System.out.println("main start-----------"+new Date()); // TODO Auto-generated method stub String url1 = "https://www.mann-hummel.com/mf_prodkata_china/index.html?ktlg_page=1&ktlg_lang=16&ktlg_01_fzart=1"; String url2 = "https://www.mann-hummel.com/mf_prodkata_china/index.html?ktlg_page=1&ktlg_lang=16&ktlg_01_fzart=2"; List<CategoryAnther> firstCategory = new ArrayList<CategoryAnther>(); // List<CategoryAnther> secondCategory = new ArrayList<CategoryAnther>(); firstCategory = addChildrenToList(url1); firstCategory.addAll(addChildrenToList(url2)); // secondCategory = addChildrenToList(url2); List<CarInfo> carInfo = new ArrayList<CarInfo>(); try{ File f = new File("liufen.txt"); if(!f.exists()) f.createNewFile(); FileWriter fw = new FileWriter(f,true); // readFileByLines("xiangqi.txt",fw); for(int i =0;i<firstCategory.size();i++){ CategoryAnther categoryAnther = firstCategory.get(i); List<CategoryAnther> childrenCategory = categoryAnther.getCategoryAnther(); for(int j=0;j<childrenCategory.size();j++){ String _url = url1+"&ktlg_01_mrksl="+categoryAnther.getId()+"&ktlg_01_mdrsl="+childrenCategory.get(j).getId(); // System.out.println(_url); //start analyze data by url carInfo.addAll(getDataByUrl(categoryAnther.getName(),childrenCategory.get(j).getName(),_url)); } } // for(int i =0;i<secondCategory.size();i++){ // CategoryAnther categoryAnther = secondCategory.get(i); // List<CategoryAnther> childrenCategory = categoryAnther.getCategoryAnther(); // for(int j=0;j<childrenCategory.size();j++){ // String _url = url2+"&ktlg_01_mrksl="+categoryAnther.getId()+"&ktlg_01_mdrsl="+childrenCategory.get(j).getId(); // //start analyze data by url // carInfo.addAll(getDataByUrl(categoryAnther.getName(),childrenCategory.get(j).getName(),_url)); // } // } fw.write("开始写入1------\r\n"); for(int k=0;k<carInfo.size();k++){ fw.write(carInfo.get(k).getCar().get(0)+"\r\n"); } fw.write("开始写入2------\r\n"); for(int k=0;k<carInfo.size();k++){ fw.write(carInfo.get(k).getCar().get(1).replace(" ", " ")+"\r\n"); } fw.write("开始写入3------\r\n"); for(int k=0;k<carInfo.size();k++){ fw.write(carInfo.get(k).getCar().get(2)+"\r\n"); } fw.write("开始写入4------\r\n"); for(int k=0;k<carInfo.size();k++){ fw.write(carInfo.get(k).getCar().get(3)+"\r\n"); } fw.write("开始写入5------\r\n"); for(int k=0;k<carInfo.size();k++){ fw.write(carInfo.get(k).getCar().get(4)+"\r\n"); } fw.write("开始写入6------\r\n"); for(int k=0;k<carInfo.size();k++){ fw.write(carInfo.get(k).getCar().get(5)+"\r\n"); } fw.write("开始写入7------\r\n"); for(int k=0;k<carInfo.size();k++){ fw.write(carInfo.get(k).getCar().get(6)+"\r\n"); } fw.flush(); fw.close(); }catch(Exception e){ e.printStackTrace(); } System.out.println("main end-----------"+new Date()); } public static String getHtmlByUrl(String url){ int layouttime = 20000; String html =""; try { URL b = new URL(url); URLConnection urlConnection = b.openConnection(); urlConnection.setReadTimeout(layouttime); InputStream inputStream = urlConnection.getInputStream(); BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "gb2312")); String rString = null; while ((rString = in.readLine()) != null) { html+=rString; } }catch(Exception e){ e.printStackTrace(); } return html; } public static List<CarInfo> getDataByUrl(String firstName,String secondName,String url){ System.out.println("getDataByUrl start-----------"+new Date()); List<CarInfo> carInfoList = new ArrayList<CarInfo>(); String html =""; html = getHtmlByUrl(url); Parser parser = Parser.createParser(html, "gb2312"); NodeFilter nameFilter = new HasAttributeFilter("id", "rahmen"); NodeList list = null; try { list = parser.extractAllNodesThatMatch(nameFilter); } catch (ParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } // System.out.println("得到的行数的大小1:"+list.toHtml()); NodeList tablelist= list.elementAt(0).getChildren(); // System.out.println("得到的行数的大小2:"+tablelist.toHtml()); NodeList trlist= tablelist.elementAt(1).getChildren(); // System.out.println("得到的行数的大小3:"+trlist.toHtml()); for(int i =6;i<trlist.size();i=i+2){ List<String> trInfo = new ArrayList<String>(); trInfo.add(firstName); trInfo.add(secondName); TableRow tableRow = (TableRow) trlist.elementAt(i); NodeList tdlist = tableRow.getChildren(); for(int j =2;j<tdlist.size();j=j+3){ TableColumn tableColumn = (TableColumn) tdlist.elementAt(j); NodeList alist = tableColumn.getChildren(); LinkTag linkTag = null; if(j==2) linkTag = (LinkTag) alist.elementAt(1); else linkTag = (LinkTag) alist.elementAt(2); trInfo.add(linkTag.getLinkText()); // System.out.print(linkTag.getLinkText()+"--"); } CarInfo carInfo = new CarInfo(); carInfo.setCar(trInfo); System.out.println(trInfo.get(0)); carInfoList.add(carInfo); } System.out.println("getDataByUrl end-----------"+new Date()); return carInfoList; } public static List<CategoryAnther> addChildrenToList(String url){ System.out.println("addChildrenToList start-----------"+new Date()); List<CategoryAnther> firstCategrory = getFirstPageCategoryIds(url,"ktlg_01_mrksl"); for (int i = 0; i < firstCategrory.size(); i++) { String _url = url + "&ktlg_01_mrksl=" + firstCategrory.get(i).getId(); //对二级目录进行解析 firstCategrory.get(i).setCategoryAnther(getFirstPageCategoryIds(_url,"ktlg_01_mdrsl")); } System.out.println("addChildrenToList end-----------"+new Date()); return firstCategrory; } public static List<CategoryAnther> getFirstPageCategoryIds(String url,String nameValue) { System.out.println("getFirstPageCategoryIds start-----------"+new Date()); List<CategoryAnther> categorys = new ArrayList<CategoryAnther>(); String html =""; html = getHtmlByUrl(url); Parser parser = Parser.createParser(html, "gb2312"); NodeFilter nameFilter = new HasAttributeFilter("name", nameValue); NodeList list = null; try { list = parser.extractAllNodesThatMatch(nameFilter); } catch (ParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } NodeList optionList= list.elementAt(0).getChildren(); for(int i =1;i<optionList.size();i++){ OptionTag option = (OptionTag) optionList.elementAt(i); CategoryAnther categoryAnther = new CategoryAnther(); // System.out.print(option.getAttribute("value")+"--"); // System.out.println(option.getChildrenHTML()); categoryAnther.setId(option.getAttribute("value")); categoryAnther.setName(option.getChildrenHTML()); categorys.add(categoryAnther); } System.out.println("getFirstPageCategoryIds end-----------"+new Date()); return categorys; } public static void readFileByLines(String fileName,FileWriter fw) { File file = new File(fileName); BufferedReader reader = null; try { System.out.println("以行为单位读取文件内容,一次读一整行:"); reader = new BufferedReader(new FileReader(file)); String tempString = null; int line = 1; // 一次读入一行,直到读入null为文件结束 while ((tempString = reader.readLine()) != null) { // 显示行号 if(tempString.trim().equals("")) fw.write(tempString+"\r\n"); else if(tempString.indexOf("-")>-1) fw.write(tempString+"\r\n"); else fw.write(tempString+"→"+"\r\n"); } reader.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e1) { } } } } }
不懂得call 13886053422 或QQ 526151410
下面附有项目文件。由于版权所有,设有密码。请向本人索要密码
- exportinfo.rar (664.7 KB)
- 下载次数: 4
发表评论
-
机器学习----逻辑回归
2016-02-19 12:12 795这节学习的是逻辑回归 ... -
通用广告推荐,团购推荐,商户推荐,商品推荐数据算法框架
2015-09-01 16:51 630本章介绍的是简单的多维权重算法以广告为例, 广告有很多属性 ... -
算法程序-通过log重现计算过程
2015-08-17 14:56 1526核心算法类 public class ShopScorer ... -
机器学习算法模型(一)
2015-08-04 12:45 810之前介绍了通用的经验型权重配置算法,但是仍然无法对200多个 ... -
商品名匹配算法
2012-12-17 10:23 1763商品名组成为 品牌+型号(规格)+形容词(颜色)+商品简称+ ... -
求点到曲线的最短距离 垂直逼近算法
2012-08-20 11:13 5776y = ln(x) + Math.pow(x,0.000333 ... -
牛顿迭代--高斯方程求解
2012-08-20 10:59 3012y = alnx + x + x*x + x *x *x + ... -
价格弹性指数 价格与销量模型
2012-07-30 10:35 3696在当今电子商务越来越热的情况下,价格战与利润是一个关键点,价格 ... -
float 导致的计算精确度问题
2012-05-31 14:04 1129java 中float 计算精确度问题,解决方法是利用Bi ... -
价格与销量的关系 JAVA实现该算法 最小二乘法
2012-04-05 17:47 1475由于方程式不方便编辑,一切都在附件的图片和word文档上 -
对URL非法字符进行转义
2012-03-15 15:45 1255url=“http://www.baidu.com?body= ... -
JAVA 读取CSV文件
2012-03-12 16:40 13651、读取CSV文件只从第二行开始读取,忽略标题的,包文件自己搜 ... -
OPI 导出EXCEL(JAVA 应用程序非WEB导出)
2012-03-12 16:39 16831、直接是工具类调用静态方法 import java.io. ... -
JSP 无模板导出功能实现
2012-02-16 10:26 897HttpServletResponse response = ... -
lucene 分词解析器 将商品名全部切成各种词方便匹配
2012-01-10 16:22 15931、附件附上中文解析器的相关包 2、代码 package ... -
导出EXCEL常用工具类
2011-11-18 15:06 13081、接口 package com.yihaodian. ... -
File的读取和写入操作 java
2011-11-18 13:08 9961、文件的读取操作 File file = new Fil ... -
排序算法,从大到小
2011-11-11 10:51 8781、得到list中最大的那个值 public OppoSit ... -
正则表达式提取特定字符串内的特定内容
2011-09-28 09:16 1548我在@京东商城 发现了一个非常不错的商品:七彩云南 寿 熟饼3 ... -
用递归算法查找父节点下的所有叶子节点
2011-09-13 16:31 9565父节点 ----叶子节点 ----子节点一 ------ ...
相关推荐
1、野外测量的横断面碎部点数据经过全站仪或者RTK导出成南方CASS点格式的dat文件后,可以先展入CAD中,而后根据自己需要增加或者删减无用点, 而后点击 表1 工具条中的“抓取图中点入表”按钮直接从CAD图中导入表1...
2. **深度抓取**:工具支持深度优先或广度优先的爬取策略,能按照设定的层级深入网站抓取数据,实现全站或部分页面的抓取。 3. **动态网页处理**:许多现代网站使用JavaScript或其他动态技术生成内容。WebSpider...
WEB扫描系统能够执行包括系统补丁检测、危险插件检测、网站代码审计、Web漏洞扫描、SQL注入检查、跨站脚本攻击检测、管理入口漏洞检测及敏感信息检测在内的多项功能。WEB漏洞扫描针对复杂的Web环境设计,包含网页...
网趣时尚版新增商品数据导出Excel 电子表格功能!所有商品数据可直接输出至Excel 中,对于管理员进行帐务分析、数据备份有着举足轻重的使用! 七、新增贝宝支付接口 贝宝是全球优秀的在线支付提供商,支持国内、...
网趣支持商品数据导出Excel 电子表格功能!所有商品数据可直接输出至Excel 中,对于管理员进行帐务分析、数据备份有着举足轻重的使用! 十二、支持贝宝支付接口 贝宝是全球优秀的在线支付提供商,支持国内、国外...
网趣时尚版新增商品数据导出Excel 电子表格功能!所有商品数据可直接输出至Excel 中,对于管理员进行帐务分析、数据备份有着举足轻重的使用! 六、时尚版拥有6套风格独特的模板 时尚版拥有6套不同色调的模板,...
网趣时尚版新增商品数据导出Excel 电子表格功能!所有商品数据可直接输出至Excel 中,对于管理员进行帐务分析、数据备份有着举足轻重的使用! 七、新增贝宝支付接口 贝宝是全球优秀的在线支付提供商,支持国内、...
网趣时尚版新增商品数据导出Excel 电子表格功能!所有商品数据可直接输出至Excel 中,对于管理员进行帐务分析、数据备份有着举足轻重的使用! 七、新增贝宝支付接口 贝宝是全球优秀的在线支付提供商,支持国内、...
后台稿件统计增设可按管理员、会员组、会员列表导出Excel功能。管理员管理网站中,增设稿件多级审核功能,即为为管理员分配不同角色(发稿员、初审员、终身员),而文档只有通过终身才能在前台演示。 亮点三 ...
后台稿件统计增设可按管理员、会员组、会员列表导出Excel功能。管理员管理网站中,增设稿件多级审核功能,即为为管理员分配不同角色(发稿员、初审员、终身员),而文档只有通过终身才能在前台演示。 亮点三 ...