这里希望安居客的同行的轻喷!!单纯的做测试,玩玩。

就这么糟践你们的服务器了!!!sorry!

这次学会了webmagic 设置处理的访问HTML返回代码,因为之前一直404的页面process根本都不会进来,纳闷很久,也百度了半天。

看源码看了好半天,才知道原来有这个方法设置进process的状态码,让我看源码的决心来源于 我用logger 打印的内容告诉我,webmagic已经获取了404,只是没处理而已。

也同时学会了 scheduler

package com.action;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern; import javax.management.JMException;
import javax.swing.plaf.synth.SynthSpinnerUI; import org.apache.commons.collections.bag.SynchronizedSortedBag;
import org.apache.log4j.Logger;
import org.bson.Document; import com.model.AgentListByNumModel;
import com.model.AgentListModel;
import com.model.Model_AnjukeList;
import com.mongodb.BasicDBObject;
import com.util.Constants;
import com.util.GetDate;
import com.util.MysqlUtils;
import com.util.MD5With32;
import com.util.MongoDBUtil; import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Request;
import us.codecraft.webmagic.ResultItems;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.downloader.AbstractDownloader;
import us.codecraft.webmagic.downloader.Downloader;
import us.codecraft.webmagic.monitor.SpiderMonitor;
import us.codecraft.webmagic.pipeline.ConsolePipeline;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.scheduler.PriorityScheduler;
import us.codecraft.webmagic.selector.Html;
import us.codecraft.webmagic.selector.Selectable; public class GetAnjukeAgentByNum implements PageProcessor { static Logger logger = Logger.getLogger(GetAnjukeAgentByNum.class);
static AgentListByNumModel anjukeList;
static List<String> list = new ArrayList<String>();
static List<AgentListByNumModel> list_insert = new ArrayList<AgentListByNumModel>();
static BasicDBObject doc = null;
static int num = 0;
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
Set<Integer> acceptStatCode = new HashSet<Integer>();
acceptStatCode.add(200);
acceptStatCode.add(404);
site = site.setAcceptStatCode(acceptStatCode);
return this.site;
}
@Override
public void process(Page page) {
if(page.getStatusCode()==404
||page.getHtml().xpath("//div[@class='p_1180 p_crumbs']/a[2]/text()").get().replace("经纪人", "").equals("")
||(page.getHtml()+"").contains("经纪人店铺暂时关闭")){
String spider_urls = page.getUrl() +"";
anjukeList = new AgentListByNumModel("", "", "", "", "anjuke", GetDate.getDay0(),
spider_urls, "", spider_urls, "", "", "", "", "", "");
list_insert.add(anjukeList);
MysqlUtils.InsertAnjukeAgentByNum(list_insert);
list_insert.clear();
}else{
if((page.getHtml()+"").contains("访问验证-安居客")){
num = num+1;
System.out.println("被封次数 : "+num);
}
String zone = "";
String street = "";
String contact = "";
String city = page.getHtml().xpath("//div[@class='p_1180 p_crumbs']/a[2]/text()").get().replace("经纪人", "");
String name = page.getHtml().xpath("//div[@class='p_1180 p_crumbs']/a[4]/text()").get().replace("的店铺", "");
String staffNo = page.getUrl() + "";
String company = page.getHtml().xpath("//div[@class='section service']/dl/dd/p[1]/a/text()").get();
String company_url = page.getHtml().xpath("//div[@class='section service']/dl/dd/p[1]/a/@href").get();
String store = page.getHtml().xpath("//div[@class='section service']/dl/dd/p[2]/a/text()").get();
String store_url = page.getHtml().xpath("//div[@class='section service']/dl/dd/p[2]/a/@href").get();
String comms = page.getHtml().xpath("//dl[@class='item last']/dd/a/text()").all() + "";
comms = comms.replace("[", "").replace("]", "");
String contacts = page.getHtml().xpath("//head/meta[3]/@content").get();
Pattern p = Pattern.compile(Constants.reg_phone);
Matcher m = p.matcher(contacts);
if (m.find()) {
contact = m.group(0);
}
Object[] zs = page.getHtml().xpath("//div[@class='section service']/dl[3]/dd/a/text()").all().toArray();
if (zs == null || zs.length == 0) {
String zss = page.getHtml().xpath("//div[@class='details-item']/span[@class='comm-address']/@title").get();
if (zss!=null&&(zss.contains("[") && zss.contains(" "))) {
zss = zss.substring(zss.indexOf("["), zss.indexOf("]"));
zss = zss.substring(1, zss.indexOf(" "));
if (zss.contains("-")) {
zone = zss.split("-")[0];
street = zss.split("-")[1];
}
}
anjukeList = new AgentListByNumModel("", city, zone, street, "anjuke", GetDate.getDay0(),
page.getUrl() + "", name, staffNo, company, company_url, store, store_url, contact, comms);
list_insert.add(anjukeList);
} else {
for (int i = 0; i < zs.length; i++) {
if ((zs[i] + "").contains("-")) {
String[] zss = zs[i].toString().split("-");
zone = zss[0];
street = zss[1];
}
anjukeList = new AgentListByNumModel("", city, zone, street, "anjuke", GetDate.getDay0(),
page.getUrl() + "", name, staffNo, company, company_url, store, store_url, contact, comms);
list_insert.add(anjukeList);
}
}
if(list_insert.size()>0){
MysqlUtils.InsertAnjukeAgentByNum(list_insert);
list_insert.clear();
}
} } public static void main(String[] args) {
MysqlUtils.SelectSpiderID();
PriorityScheduler scheduler = new PriorityScheduler();
Spider spider = Spider.create(new GetAnjukeAgentByNum()).setScheduler(scheduler).addPipeline(new ConsolePipeline());
for (int n = 0; n < 100000; n++) {
if(Constants.map_id.containsKey(n+"")){
System.out.println("contain : " +n);
continue;
}
String url = "https://junranfangchan.anjuke.com/gongsi-jjr-" + n + "/";
scheduler.push(new Request(url), spider);
}
System.out.println("total task num :" +scheduler.getTotalRequestsCount(spider));
spider.thread(25).run();
// Spider.create(new GetAnjukeAgentByNum()).addUrl("https://junranfangchan.anjuke.com/gongsi-jjr-99988/")
// .addPipeline(new ConsolePipeline()).thread(1).run();
//
}
}

webmagic学习之路-3:采集安居客经纪人详情页的更多相关文章

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

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

  2. HelloDjango 第 08 篇:开发博客文章详情页

    作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 首页展示的是所有文章的列表,当用户看到感兴趣的文章时,他点击文章的标题或者继续阅读的按 ...

  3. webmagic学习之路-1:采集安居客列表页测试

    ---恢复内容开始--- package com.action; import java.util.ArrayList; import java.util.List; import java.util ...

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

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

  5. python爬虫爬取安居客并进行简单数据分析

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 爬取过程一.指定爬取数据二.设置请求头防止反爬三.分析页面并且与网页源码进行比对四.分析页面整理数据 ...

  6. 从零开始,搭建博客系统MVC5+EF6搭建框架(5),博客详情页、留言、轮播图管理、右侧统计博文

    一.博客系统进度回顾 上一遍博客介绍到,系统已经实现到了发布以及前台布局展示,接下来就是实现一些,详情页,留言.轮播图管理.右侧博文统计信息实现. 二.博客系统详情页实现 2.1先来看看详情页展示的效 ...

  7. java爬虫系列第四讲-采集"极客时间"专栏文章、视频专辑

    1.概述 极客时间(https://time.geekbang.org/),想必大家都知道的,上面有很多值得大家学习的课程,如下图: 本文主要内容 使用webmagic采集极客时间中某个专栏课程生成h ...

  8. RPC远程过程调用学习之路(一):用最原始代码还原PRC框架

    RPC: Remote Procedure Call 远程过程调用,即业务的具体实现不是在自己系统中,需要从其他系统中进行调用实现,所以在系统间进行数据交互时经常使用. rpc的实现方式有很多,可以通 ...

  9. Webwork 学习之路【03】核心类 ServletDispatcher 的初始化

    1. Webwork 与 Xwork 搭建环境需要的的jar 为:webwork-core-1.0.jar,xwork-1.0.jar,搭建webwork 需要xwork 的jar呢?原因是这样的,W ...

随机推荐

  1. 安装wls报(主清单位置 "/u01/app/oracle/inventory" 无效 (无法读取/写入/执行))

    安装出现的错误: [weblogic@localhost ~]$ java -jar fmw_12.1.3.0.0_wls.jar 启动程序日志文件为/tmp/OraInstall2019-07-31 ...

  2. Grafana添加Zabbix为数据源(二)

    接触过grafana的同学肯定会觉得grafana比zabbix的图像灵活好看很多,下面就让我们一起进行grafana的web界面配置 1.鼠标移动到左上角,点击Plugins,然后选择"c ...

  3. UnicodeEncodeError: 'ascii' codec can't encode characters

    将网页get到之后输入文本出现UnicodeEncodeError: 'ascii' codec can't encode characters错误 f = open('re.txt', 'w') u ...

  4. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-1.整合Mybatis访问数据库和阿里巴巴数据源

    笔记 1.整合Mybatis访问数据库和阿里巴巴数据源     简介:整合mysql 加入mybatis依赖,和加入alibaba druid数据源 1.加入依赖(可以用 http://start.s ...

  5. JAVA 基础编程练习题8 【程序 8 输入数字求和】

    8 [程序 8 输入数字求和] 题目:求 s=a+aa+aaa+aaaa+aa...a 的值,其中 a 是一个数字.例如 2+22+222+2222+22222(此时共有 5 个 数相加),几个数相加 ...

  6. Linux系统管理_主题02 :管好文件(1)_2.3 拷贝、剪切、删除和创建文件_cp_mv_rm

    用法:cp [选项]... [-T] 源文件 目标文件 或:cp [选项]... 源文件... 目录 或:cp [选项]... -t 目录 源文件... 将源文件复制至目标文件,或将多个源文件复制至目 ...

  7. leetcode 股票系列

    五道股票题总结: 121 买卖股票的最佳时机 122 买卖股票的最佳时机 124 买卖股票的最佳时机4 309  最佳股票买卖含冷冻期 714 买卖股票的最佳时机含有手续费 121 买卖股票的最佳时机 ...

  8. React Native常用第三方汇总

    React Native 项目常用第三方组件汇总:  react-native-animatable 动画 react-navigation github : https://reactnavigat ...

  9. MATLAB实现图像的代数运算

    目录 1.使用求补运算对各类图像进行处理 2.利用imlincomb函数将图像的灰度值放大1.5倍 3.利用imlincomb函数计算两幅图像的平均值. 4.图像的加法运算 5.利用imnoise函数 ...

  10. 模型蒸馏(Distil)及mnist实践

    结论:蒸馏是个好方法. 模型压缩/蒸馏在论文<Model Compression>及<Distilling the Knowledge in a Neural Network> ...