前几天学习了一个开源的java爬虫框架crawler4j,在摸索了一段时间后写了一个爬虫demo,特此记录分享,框架的搭建和方法的意义什么的就不详细说明了,网上有很多相关的教程可以看一下;
根据官方demo还是将爬虫分为两个类
一个controller类
一个crawler类
controller类我简单的修改了爬虫种子
controller.addSeed("http://jinan.koofang.com/sale/c1/pg1");
crawler类的修改
修改了筛选规则
private final static Pattern FILTERS = Pattern.compile(".*(\\.(css|js|"
+ "|tiff?|mid|mp2|mp3|mp4" + "|wav|avi|mov|mpeg|ram|m4v|pdf"
+ "|rm|smil|wmv|swf|wma|zip|rar|gz))$");
/**
* You should implement this function to specify whether the given url
* should be crawled or not (based on your crawling logic).
*/
@Override
public boolean shouldVisit(Page referringPage, WebURL url) {
String href = url.getURL().toLowerCase();
if(FILTERS.matcher(href).matches()){
return false;
}
if(href.contains("sale/c1/pg")){
return true;
}
return false;
}
修改了页面处理的方法
public void visit(Page page) {
String url = page.getWebURL().getURL();
System.out.println(url);
if (page.getParseData() instanceof HtmlParseData) {
HtmlParseData htmlParseData = (HtmlParseData) page.getParseData();
String text = htmlParseData.getText();
String html = htmlParseData.getHtml();
Set<WebURL> links = htmlParseData.getOutgoingUrls();
Document doc = Jsoup.parse(html);
Elements items = doc.getElementsByClass("miaoshu");
for (Element item : items) {
String name = item.select("#mh_area").text();
String size1 = item.select("div > div.xiangxi_left > p.map_house > span:nth-child(2)").text();
String size2 = item.select("div > div.xiangxi_left > p.map_house > span:nth-child(3)").text();
String address = item.select("div > div.xiangxi_left > p:nth-child(4)").text();
String cost = item.select("div > div.xiangxi_right > div.xiangxi_right_price_com > div.xiangxi_right_price.fl > span").text();
String per = item.select("div > div.xiangxi_right > div.xiangxi_right_danjia").text();
String link = item.select("#biaoti_a").attr("href");
System.out.println(name+" "+size1+" "+size2+" "+address+" "+cost+"万元 "+per+" "+link);
}
}
}
其中元素的selector选取,可以使用浏览器的copy selector功能,比较方便准确;
最后的运行结果如下
转载自原文链接, 如需删除请联系管理员。
原文链接:crawler4j使用初体验之酷房网房源爬取,转载请注明来源!