---恢复内容开始---

package com.action;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern; import javax.management.JMException; import org.bson.Document; import com.model.Model_AnjukeList;
import com.mongodb.BasicDBObject;
import com.util.Constants;
import com.util.GetDate;
import com.util.MD5With32;
import com.util.MongoDBUtil; import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.monitor.SpiderMonitor;
import us.codecraft.webmagic.pipeline.ConsolePipeline;
import us.codecraft.webmagic.processor.PageProcessor; public class GetAnjukeListNum implements PageProcessor { public static Model_AnjukeList anjukeList;
public static List<String> list = new ArrayList<String>();
public static List<BasicDBObject> list_insert = new ArrayList<BasicDBObject>();
private Site site = Site.me().setSleepTime(1000).setRetryTimes(3).setCharset("UTF-8")
.setUserAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36");
@Override
public Site getSite() {
// TODO Auto-generated method stub
return this.site;
} @Override
public void process(Page page) {
String found = null;
BasicDBObject doc = null;
page.addTargetRequests(Constants.list_urls);
System.out.println("code:"+page.getStatusCode());
String pg = page.getHtml().toString();
if(pg.length()>100){
Pattern p = Pattern.compile(Constants.anjuke_Reg_Found);
Matcher m = p.matcher(pg);
while(m.find()){
found = m.group(0).replace("\"found\":", "").replace(",", "");
String id = MD5With32.encryption(page.getUrl().toString());
if(!Constants.map_urls.containsKey(id)){
continue;
}
Model_AnjukeList model_AnjukeList = Constants.map_urls.get(id);
//mongo存储!
doc = new BasicDBObject("_id",id)
.append("city", model_AnjukeList.getCity())
.append("towards", model_AnjukeList.getTowards())
.append("zone_urls", model_AnjukeList.getZone_urls())
.append("zone", model_AnjukeList.getZone())
.append("site", model_AnjukeList.getSite())
.append("decoration", model_AnjukeList.getDecoration())
.append("flag", model_AnjukeList.getFlag())
.append("street", model_AnjukeList.getStreet())
.append("type", model_AnjukeList.getType())
.append("page", model_AnjukeList.getPage())
.append("urls", model_AnjukeList.getUrls())
.append("found", found)
.append("update_time", model_AnjukeList.getUpdate_time())
;
list_insert.add(doc);
}
}
} public static void main(String[] args) {
String city = "北京";
String urls = "https://beijing.anjuke.com/sale/";
MongoGetUrls.GetMongoUrls(city);
System.out.println("任务总数:"+Constants.list_urls.size());
Spider.create(new GetAnjukeListNum())
.addUrl(urls)
.addPipeline(new ConsolePipeline())
.thread(30)
.run(); MongoDBUtil.saveMany(..., list_insert);
}
}

第一次用webmagic 很多东西不懂,也没有重写。

很多都是用纯java实现

让我们慢慢发现webmagic的强大吧!

webmagic学习之路-1:采集安居客列表页测试的更多相关文章

  1. webmagic学习之路-3:采集安居客经纪人详情页

    这里希望安居客的同行的轻喷!!单纯的做测试,玩玩. 就这么糟践你们的服务器了!!!sorry! 这次学会了webmagic 设置处理的访问HTML返回代码,因为之前一直404的页面process根本都 ...

  2. webmagic学习之路-2:采集安居客经纪人列表

    相比较 1 稍微成熟了一点,会用的东西多了. 正则用的不好,很多东西不会,大神轻喷! package com.action; import java.util.ArrayList; import ja ...

  3. Bootstrap学习之路(1)---开篇-登陆页

    Bootstrap是现在很流行的一套前端框架,尤其是它的自适应,真的很不错,而且对移动设备也很友好,可以达到快速开发的效果,最近想把自己的网站弄个手机版,很果断的就选用了bootstrap,跟大家分享 ...

  4. 嵌入式Linux驱动学习之路(十九)触摸屏驱动、tslib测试

    触摸屏使用流程: 1. 按下产生中断. 2.在中断处理程序中启动AD转换XY坐标. 3.AD转换结束并产生AD中断. 4. 在AD的中断处理函数中上报信息,启动定时器. 5. 定时器时间到后进入中断, ...

  5. Python学习之路基础篇--05Python基础+列表和元组

    1 list # 增 city = ["wuhan", "shanghai", "chongqing", "changsha&qu ...

  6. Redis学习之路(003)- hiredis安装及测试

    一. hiredis下载地址及C API  github下载:https://github.com/redis/hiredis 安装脚本: #!/bin/zsh git clone https://g ...

  7. Python爬虫实战(3):安居客房产经纪人信息采集

    1, 引言 Python开源网络爬虫项目启动之初,我们就把网络爬虫分成两类:即时爬虫和收割式网络爬虫.为了使用各种应用场景,该项目的整个网络爬虫产品线包含了四类产品,如下图所示: 本实战是上图中的“独 ...

  8. Redis学习之路(000)- 目录

    本文是博主学习整理网上大神的文件以及自学的心得. Redis学习之路(000)- 目录 Redis学习之路(001)- Redis介绍以及安装(Linux) Redis学习之路(002)- Ubunt ...

  9. Django学习案例一(blog):五. 开发主页(博客列表展示)

    主页是一个“博客列表”页.博客要按发布时间的倒序来排列,每个博客都要包含标题.作者.分类.发布时间的显示(年-月-日 时:分)及节选的正文内容(前 100 个字).点击单独的博客可以进入其详情页. 1 ...

随机推荐

  1. Trees Made to Order——Catalan数和递归

    Trees Made to Order Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7155   Accepted: 40 ...

  2. pytorch-Alexnet 网络

    Alexnet网络结构, 相比于LeNet,Alexnet加入了激活层Relu, 以及dropout层 第一层网络结构: 11x11x3x96, 步长为4, padding=2 第二层网络结构: 5x ...

  3. Android判断view在屏幕可见

    /** * 判断当前view是否在屏幕可见 */public static boolean getLocalVisibleRect(Context context, View view, int of ...

  4. easuUI之datebox日期选择框

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  5. WampServer 下载以及安装问题 以及配置远程连接MYSQL

    WampServer 3.0 下载: http://dl.pconline.com.cn/download/52877-1.html 碰到的问题DDL无法添加,解决方法:MSVCR110.DLL fo ...

  6. openstack部署cinder

    controller 一.创建cinder数据库并设置权限 mysql -u root -p    CREATE DATABASE cinder;    GRANT ALL PRIVILEGES ON ...

  7. 【转】ffluos编译

    FluffOS是在MUDOS基础上更新完成的.进行了许多新功能和bug修复. 针对LPC有很好的兼容性,如果你的MUD运行MUDOS V22+版本,可以很容易运行在fluffos上. 系统环境: Cn ...

  8. composer install与composer update的区别

    1.composer install install 命令从当前目录读取 composer.json 文件,处理了依赖关系,并把其安装到 vendor 目录下. php composer.phar i ...

  9. Linux(CentOS)下安装tesseract-ocr以及配置依赖leptonica

    下载 wget https://github.com/tesseract-ocr/tesseract/archive/4.1.0.tar.gz wget http://www.leptonica.or ...

  10. iscsi-分区类型

    iSCSI简介(Internet SCSI): iSCSI 小型计算机系统接口,IBM公司研发,用于在IP网络上运行SCSI协议:解决了 SCSI需要直连存储设备的局限性:可以不停机扩展存储容量,iS ...