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 ...
随机推荐
- [Java]给指定时间加上十秒
package com.testEmp; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util. ...
- Node安装配置
下载安装nodejs后进行如下配置: 修改模块安装位置和缓存位置在要存放的位置手动新建全局目录node_global在要存放的位置手动新建缓存目录node_cache执行如下命令:npm config ...
- flutter 自定义tabbar 给tabbar添加背景功能
flutter 自带的tabbar BottomNavigationBar有长按水波纹效果,不可以添加背景图片功能,如果有这方面的需求,就需要自定义tabbar了 自定义图片 我们使用BottomAp ...
- an extra named object property
Grunt supports the ability to split each task configuration into several separate configurations all ...
- Python异步IO之协程(二):使用asyncio的不同方法实现协程
引言:在上一章中我们介绍了从yield from的来源到async的使用,并在最后以asyncio.wait()方法实现协程,下面我们通过不同控制结构来实现协程,让我们一起来看看他们的不同作用吧- 在 ...
- Python-sympy科学计算与数据处理(方程,微分,微分方程,积分)
方程 a,b,c,x = symbols("a b c x") my_eq = Eq(a*x**2+b*x+c,0) solve(my_eq,x) Out[12]: [(-b + ...
- kettle mogodb output详解
以下主要来自官网文档,原文:https://wiki.pentaho.com/display/EAI/MongoDB+Output Configure Connection Tab 1 Host na ...
- React Native使用Redux总结
1>npm安装redux: "react-redux": "^5.0.5", "redux": "^3.7.1", ...
- DISCUZ论坛各大功能模块入口文件介绍
index.php 首页入口文件,这个文件相信大家都不陌生,小编就不具体介绍了. forum.php 论坛入口文件 portal.php 门户入口文件 group.php 群组入口文件 home.ph ...
- 条件DCGAN(2019/09/10)
最近看到keras的官方GAN代码中有CGAN(全连接层)和卷积GAN(DCGAN),但他并没有给出“条件卷积GAN”,预测就把这两者结合了一下.虽然很多人用其他框架(e.g.TensorFlow)写 ...