webmagic学习之路-1:采集安居客列表页测试
---恢复内容开始---
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:采集安居客列表页测试的更多相关文章
- webmagic学习之路-3:采集安居客经纪人详情页
这里希望安居客的同行的轻喷!!单纯的做测试,玩玩. 就这么糟践你们的服务器了!!!sorry! 这次学会了webmagic 设置处理的访问HTML返回代码,因为之前一直404的页面process根本都 ...
- webmagic学习之路-2:采集安居客经纪人列表
相比较 1 稍微成熟了一点,会用的东西多了. 正则用的不好,很多东西不会,大神轻喷! package com.action; import java.util.ArrayList; import ja ...
- Bootstrap学习之路(1)---开篇-登陆页
Bootstrap是现在很流行的一套前端框架,尤其是它的自适应,真的很不错,而且对移动设备也很友好,可以达到快速开发的效果,最近想把自己的网站弄个手机版,很果断的就选用了bootstrap,跟大家分享 ...
- 嵌入式Linux驱动学习之路(十九)触摸屏驱动、tslib测试
触摸屏使用流程: 1. 按下产生中断. 2.在中断处理程序中启动AD转换XY坐标. 3.AD转换结束并产生AD中断. 4. 在AD的中断处理函数中上报信息,启动定时器. 5. 定时器时间到后进入中断, ...
- Python学习之路基础篇--05Python基础+列表和元组
1 list # 增 city = ["wuhan", "shanghai", "chongqing", "changsha&qu ...
- Redis学习之路(003)- hiredis安装及测试
一. hiredis下载地址及C API github下载:https://github.com/redis/hiredis 安装脚本: #!/bin/zsh git clone https://g ...
- Python爬虫实战(3):安居客房产经纪人信息采集
1, 引言 Python开源网络爬虫项目启动之初,我们就把网络爬虫分成两类:即时爬虫和收割式网络爬虫.为了使用各种应用场景,该项目的整个网络爬虫产品线包含了四类产品,如下图所示: 本实战是上图中的“独 ...
- Redis学习之路(000)- 目录
本文是博主学习整理网上大神的文件以及自学的心得. Redis学习之路(000)- 目录 Redis学习之路(001)- Redis介绍以及安装(Linux) Redis学习之路(002)- Ubunt ...
- Django学习案例一(blog):五. 开发主页(博客列表展示)
主页是一个“博客列表”页.博客要按发布时间的倒序来排列,每个博客都要包含标题.作者.分类.发布时间的显示(年-月-日 时:分)及节选的正文内容(前 100 个字).点击单独的博客可以进入其详情页. 1 ...
随机推荐
- SRS之SrsTsContext::encode_pes详解
1. SrsTsContext::encode_pes 该函数位于 srs_kernel_ts.cpp 中.下面的分析基于假设当前要封装的消息是视频. /* * @msg: 要写入到 ts 文件中的音 ...
- 2965 -- The Pilots Brothers' refrigerator
The Pilots Brothers' refrigerator Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 27893 ...
- 【log4j】log4j.properties 文件示例
# 下面的文件内容是写程序长期要用的,放在这里留个底#Output information(higher than INFO) to stdout and file.info/debug/error ...
- AndroidStudio 3.0中之后无法打开DDMS [Android Device Monitor] 问题
AndroidStudio 3.0中之后无法打开DDMS [Android Device Monitor] 问题 转 https://blog.csdn.net/black_bird_cn/ar ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-4.在线教育后台数据库设计
笔记 4.在线教育后台数据库设计 简介:讲解后端数据库设计 ,字段冗余的好处,及常见注意事项 1.数据库设计: er图: 实体对象:矩形 ...
- Js 监听器
在Ajax取数据时,采用$("#id").click(function(){})的方式不能正确设置监听,需要用$("#parent").on("cli ...
- Oracle11gR2之ORA-01034、ORA-27101、ORA-00119、 ORA-00132
昨天安装的oracel,今天用navicat连接oracel出现以下错误: ORA-01034: ORACLE not available ORA-27101: shared memory realm ...
- Swift 3.0 Date的简单使用
// // ViewController.swift // Date的使用 // // Created by 思 彭 on 16/9/20. // Copyright © 2016年 思 彭. All ...
- Day04:异常处理(二) / 多线程基础
多线程 线程是什么? 一个线程是线程一个顺序执行流. 同类的多个线程共享一块内存空间和一组系统资源,线程本身有一个供程序执行时的栈堆.线程在切换时负荷小,因此,线程也被称为轻负荷进程.一个进程中可以包 ...
- Windows配置jdk环境变量
配置环境变量 前置条件:已经安装jdk以及jre 操 作:右击"我的电脑"-->"属性"-->"高级系统设置"-->&qu ...