/*** @date 2016年8月20日 下午6:13:24

*@version*@sinceJDK 1.8*/

public class ZiroomCrawler extendsWebCrawler {/**爬取匹配原则*/

private final static Pattern FILTERS = Pattern.compile(".*(\\.(css|js|bmp|gif|jpe?g|ico"

+ "|png|tiff?|mid|mp2|mp3|mp4" + "|wav|avi|mov|mpeg|ram|m4v|pdf" + "|rm|smil|wmv|swf|wma|zip|rar|gz))$");/**爬取数据保存文件路径*/

private final static String DATA_PATH = "data/crawl/ziroom.csv";/**爬取link文件路径*/

private final static String LINK_PATH = "data/crawl/link.csv";//private static final Logger logger =//LoggerFactory.getLogger(ZiroomCrawler.class);

private final static String URL_PREFIX = "http://sh.ziroom.com/z/nl/";private finalFile fLinks;private finalFile fDatas;privateCsvWriter csvLinks;privateCsvWriter csvDatas;/*** You should implement this function to specify whether the given url

* should be crawled or not (based on your crawling logic).*/ZiroomCrawlStat myCrawlStat;public ZiroomCrawler() throwsIOException {

myCrawlStat= newZiroomCrawlStat();

fLinks= newFile(DATA_PATH);

fDatas= newFile(LINK_PATH);if(fLinks.isFile()) {

fLinks.delete();

}if(fDatas.isFile()) {

fDatas.delete();

}

csvDatas= new CsvWriter(new FileWriter(fDatas, true), ',');

csvDatas.write("请求路径");

csvDatas.endRecord();

csvDatas.close();

csvLinks= new CsvWriter(new FileWriter(fLinks, true), ',');

csvLinks.write("图片");

csvLinks.write("价格");

csvLinks.write("地址");

csvLinks.write("说明");

csvLinks.endRecord();

csvLinks.close();

}public voiddumpMyData() {final int id =getMyId();//You can configure the log to output to file

logger.info("Crawler {} > Processed Pages: {}", id, myCrawlStat.getTotalProcessedPages());

logger.info("Crawler {} > Total Links Found: {}", id, myCrawlStat.getTotalLinks());

logger.info("Crawler {} > Total Text Size: {}", id, myCrawlStat.getTotalTextSize());

}

@OverridepublicObject getMyLocalData() {returnmyCrawlStat;

}

@Overridepublic voidonBeforeExit() {

dumpMyData();

}/** 这个方法决定了要抓取的URL及其内容,例子中只允许抓取“http://sh.ziroom.com/z/nl/”这个域的页面,

* 不允许.css、.js和多媒体等文件

*

* @see edu.uci.ics.crawler4j.crawler.WebCrawler#shouldVisit(edu.uci.ics.

* crawler4j.crawler.Page, edu.uci.ics.crawler4j.url.WebURL)*/@Overridepublic booleanshouldVisit(Page referringPage, WebURL url) {final String href =url.getURL().toLowerCase();if (FILTERS.matcher(href).matches() || !href.startsWith(URL_PREFIX)) {return false;

}return true;

}/** 当URL下载完成会调用这个方法。你可以轻松获取下载页面的url, 文本, 链接, html,和唯一id等内容。

*

* @see

* edu.uci.ics.crawler4j.crawler.WebCrawler#visit(edu.uci.ics.crawler4j.

* crawler.Page)*/@Overridepublic voidvisit(Page page) {final String url =page.getWebURL().getURL();

logger.info("爬取路径:" +url);

myCrawlStat.incProcessedPages();if (page.getParseData() instanceofHtmlParseData) {final HtmlParseData htmlParseData =(HtmlParseData) page.getParseData();final Set links =htmlParseData.getOutgoingUrls();try{

linkToCsv(links);

}catch (finalIOException e2) {//TODO Auto-generated catch block

e2.printStackTrace();

}

myCrawlStat.incTotalLinks(links.size());try{

myCrawlStat.incTotalTextSize(htmlParseData.getText().getBytes("UTF-8").length);

}catch (finalUnsupportedEncodingException e1) {//TODO Auto-generated catch block

e1.printStackTrace();

}final String html =htmlParseData.getHtml();final Document doc =Jsoup.parse(html);final Elements contents = doc.select("li[class=clearfix]");for (finalElement c : contents) {//图片

final String img = c.select(".img img").first().attr("src");

logger.debug("图片:" +img);//地址

final Element txt = c.select("div[class=txt]").first();final String arr1 = txt.select("h3 a").first().text();final String arr2 = txt.select("h4 a").first().text();final String arr3 = txt.select("div[class=detail]").first().text();final String arr = arr1.concat(arr1 + ",").concat(arr2 + ",").concat(arr3);

logger.debug("地址:" +arr);//说明

final String rank = txt.select("p").first().text();

logger.debug("说明:" +rank);//价格

final String pirce = c.select("p[class=price]").first().text();try{

csvLinks= new CsvWriter(new FileWriter(fLinks, true), ',');

csvLinks.write(img);

csvLinks.write(pirce);

csvLinks.write(arr);

csvLinks.write(rank);

csvLinks.endRecord();

csvLinks.flush();

csvLinks.close();

}catch (finalIOException e) {

e.printStackTrace();

}

}

}

}private void linkToCsv(Set links) throwsIOException {

csvDatas= new CsvWriter(new FileWriter(fDatas, true), ',');for (finalWebURL webURL : links) {

csvDatas.write(webURL.getURL());

}

csvDatas.flush();

csvDatas.endRecord();

csvDatas.close();

}

}

java房源信息管理的代码_crawler4j源码学习(2):Ziroom租房网房源信息采集爬虫相关推荐

  1. java商品信息管理系统代码_[源码分享]学生信息管理系统(管理员)

    我一直以为学生信息管理系统是烂大街的,网上一搜一大把的那种 毕竟这种项目是学完C语言之后都可以独立完成的项目,只有界面好看与否的问题 最近好多学生问学生信息管理系统的代码,估计是C语言大作业什么的.然 ...

  2. java远程监控系统代码_[源码和文档分享]基于JAVA的远程屏幕监控系统

    远程屏幕监控系统在生活中是很常见的,学校机房的机房管理系统.PC版QQ的远程演示功能等都属于远程屏幕监控系统.监控系统的原理是通过客户端不断的截取屏幕发送到服务器端,服务器端进而将画面呈现出来的过程. ...

  3. java web mysql树形结构_用JAVA写的树结构代码 - WEB源码|JSP源码/Java|源代码 - 源码中国...

    压缩包 : 18743599Netbeanjtree.rar 列表 Netbeanjtree/jtree/build/built-jar.properties Netbeanjtree/jtree/b ...

  4. 基于ssh的航空订票系统-飞机订票系统javaweb-机票订购课程设计java代码(源码+数据库文件+文档)

    基于ssh的航空订票系统-飞机订票系统javaweb-机票订购java代码(源码+数据库文件+文档) 注意:该项目只展示部分功能,如需了解,评论区咨询即可. 作者:IT跃迁谷 1.开发环境 开发语言: ...

  5. 基于java SpringBoot的医院门诊管理系统源码和论文

    医院门诊信息管理系统是一个基于Internet的应用系统,它是一个面对当前的医院门诊管理工作基本还处于手工和半信息自动化处理状态而应运而生的一个基于Internet的一个信息自动化的系统,整个系统从符 ...

  6. Java 源码学习系列(三)——Integer

    Integer 类在对象中包装了一个基本类型 int 的值.Integer 类型的对象包含一个 int 类型的字段. 此外,该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还 ...

  7. Java多线程之JUC包:Semaphore源码学习笔记

    若有不正之处请多多谅解,并欢迎批评指正. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/go2sea/p/5625536.html Semaphore是JUC ...

  8. java Integer 源码学习

    转载自http://www.hollischuang.com/archives/1058 Integer 类在对象中包装了一个基本类型 int 的值.Integer 类型的对象包含一个 int 类型的 ...

  9. JAVA小项目实例源码—学习娱乐小助手

    代码地址如下: http://www.demodashi.com/demo/11456.html 一.程序实现 项目目录: MyJFrame:实现项目界面样式: AppProcess:实现调用api或 ...

最新文章

  1. LIVE555再学习 -- FFmpeg + live555实现RTSP直播
  2. 机器学习实战-贝叶斯算法-24
  3. eclipse 连接mysql_eclipse连接MySQL
  4. MySql中的varchar类型
  5. bzoj4033 [HAOI2015]树上染色
  6. java单终端登陆_配置终端服务单一登录
  7. python正弦波和等腰三角波_正弦波脉宽调制(SPWM)原理
  8. xiao77论坛php,论坛
  9. 机器学习:更多的数据总是优于更好的算法吗?
  10. 分享两个必应壁纸接口,可用来获取高质量壁纸和故事
  11. c语言投票程序设计,《C语言及程序设计》实践参考——投票表决器
  12. R语言大数据分析之新闻文本数据分析
  13. 计算机桌面设置上时间表,如何在电脑桌面便签上设置日程安排表?
  14. 《AWR Adaptive Weighting Regression for 3D Hand Pose Estimation》研读与实践
  15. 3-8 Aruba交换机实用配置-链路聚合 2020
  16. wildcard 的理解
  17. Intel VT学习笔记(二)—— VMXEVMXON
  18. 英语语法笔记——状语从句(五)
  19. vue element ui 子组件向父组件传值
  20. URL转二维码,图片

热门文章

  1. 魔术方法php重定向,PHP魔术方法__get()
  2. 实战例子_Pytorch官方力荐新书《Pytorch深度学习实战指南》pdf及代码分享
  3. linux怎么用jconsole_jconsole监控上Linux上的JVM
  4. python列表功能默写_Python list(列表)功能详解
  5. 浏览器访问web服务器的图解和tomcat体系结构图
  6. uve (mui/light7)写APP的使用心得(大坑);
  7. 迅雷CEO陈磊出席深圳IT领袖峰会 解析区块链未来布局
  8. 四格漫画《MUXing》——度姐传说
  9. 大道至简第四章阅读笔记
  10. JSF 2.2: HTML5 Support