相比较 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 javax.swing.plaf.synth.SynthSpinnerUI;import org.bson.Document;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.ResultItems;
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;
import us.codecraft.webmagic.selector.Html;
import us.codecraft.webmagic.selector.Selectable;public class GetAnjukeAgentList implements PageProcessor {static AgentListModel anjukeList;static List<String> list = new ArrayList<String>();static List<AgentListModel> list_insert = new ArrayList<AgentListModel>();static BasicDBObject  doc = null;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");@Overridepublic Site getSite() {// TODO Auto-generated method stubreturn this.site;}@Overridepublic void process(Page page) {System.out.println("code:"+page.getStatusCode());System.out.println(page.getUrl());if(!page.getUrl().regex("https://[a-z]+.anjuke.com/tycoon/[a-z]+-q-[a-z]+/").match()/*&&!page.getHtml().regex("https://[a-z]+.anjuke.com/tycoon/[a-z]+-q-[a-z]+/p[0-9]+/").match()*/){page.addTargetRequests(page.getHtml().xpath("//span[@class='elems-l']/a/@href").regex("https://[a-z]+.anjuke.com/tycoon/[a-z]+/").all());if(page.getUrl().regex("https://[a-z]+.anjuke.com/tycoon/[a-z]+/").match()){page.addTargetRequests(page.getHtml().xpath("//div[@class='sub-items']/a/@href").all());}}else{//3行可以移动到这里!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//分割线--------------------List<Selectable> htmls = page.getHtml().xpath("//div[@class='jjr-info']").nodes();for(Selectable html: htmls){String name = html.xpath("//div/h3/a/text()").get();String staffNo = html.xpath("//div/h3/a/@href").get();String company = html.xpath("//p[@class='jjr-desc']/a[1]/text()").get();String company_url = html.xpath("//p[@class='jjr-desc']/a[1]/@href").get();String store = html.xpath("//p[@class='jjr-desc']/a[2]/text()").get();String store_url = html.xpath("//p[@class='jjr-desc']/a[2]/@href").get();anjukeList = new AgentListModel("", "", "", "", "anjuke", GetDate.getDay0(), page.getUrl()+"", name, staffNo, company, company_url, store, store_url);list_insert.add(anjukeList);}String city = page.getHtml().xpath("//div[@class='p_1180 p_crumbs']/a[2]/text()").get().replace("经纪人", "");String zone = page.getHtml().xpath("//div[@class='p_1180 p_crumbs']/a[3]/text()").get().replace("经纪人", "");String street = page.getHtml().xpath("//div[@class='p_1180 p_crumbs']/a[4]/text()").get().replace("经纪人", "");MysqlUtils.InsertAnjukeAgent(list_insert,city,zone,street);list_insert.clear();if(page.getHtml().regex("https://[a-z]+.anjuke.com/tycoon/[a-z]+-q-[a-z]+/p[0-9]+/").match()){//获取分页page.addTargetRequests(page.getHtml().xpath("//div[@class='page-content']/div/a/@href").all());}}}public static void main(String[] args) {List<String> list = new ArrayList<String>();list.add("https://chongqing.anjuke.com/tycoon/");for (int i = 0; i < list.size(); i++) {Spider.create(new GetAnjukeAgentList()).addUrl(list.get(i)).addPipeline(new ConsolePipeline()).thread(20).run();}}
}

这段代码有个很大的疑问,不知道有没有大神给解释一下。

String city = page.getHtml().xpath("//div[@class='p_1180 p_crumbs']/a[2]/text()").get().replace("经纪人", "");
String zone = page.getHtml().xpath("//div[@class='p_1180 p_crumbs']/a[3]/text()").get().replace("经纪人", "");
String street = page.getHtml().xpath("//div[@class='p_1180 p_crumbs']/a[4]/text()").get().replace("经纪人", "");

上面这3行,如果你把位置移动一下。

移动到分割线上面去。

这3个xpath会匹配不到内容,我研究了很长时间,没搞明白,也就没再研究下去了。

评论区留言告知下,谢谢!!

 

转载于:https://www.cnblogs.com/tnsay/p/10895325.html

webmagic学习之路-2:采集安居客经纪人列表相关推荐

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

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

  2. Python爬取安居客经纪人信息

    Python爬取安居客经纪人信息 Python2.7.15 今天我们来爬取安居客经纪人的信息.这次我们不再使用正则,我们使用beautifulsoup.不了解的可以先看一下这个文档,便于理解.http ...

  3. python 安居客 爬虫_爬虫学习6:爬取安居客的VR房源信息

    公司的VR产品在推广前夕,需要做一个较详细的市场分析报告,我们可以从下面几个步骤来深入探讨: 1.需要展望整个VR的市场规模有多大,从而论证我们需要面对的市场分量, 2.在这个大市场下面,我们面对的细 ...

  4. 安卓学习之路之如何显示一个listview列表视图

    1.新建个安卓项目,点击res下的values目录,在该目录下创建一个名字为arrays.xml的Android xml文件,然后开始在里面写代码,代码如下: <?xml version=&qu ...

  5. C 语言学习:班级同学的博客地址列表

    这里整理出本班级同学的博客地址.请各位同学之间相互帮助,尽快将博客都建立起来. 编号 学号 姓名 Cnblogs昵称 博客地址 Coding.net 地址 1 160809401 付胤 付胤 http ...

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

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

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

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

  8. python爬虫代码房-Python爬虫实战(3):安居客房产经纪人信息采集

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

  9. Docker学习之路05:五分钟用docker compose搭建一个自己的个人博客网站!

    五分钟用docker compose搭建一个自己的个人博客网站! Docker学习路线传送门: Docker学习之路01:Docker的安装 Docker学习之路02:阿里云镜像加速器 Docker学 ...

最新文章

  1. 地址池命令 思科理由_思科互联网络操作系统 ——路由器接口
  2. jquery-$()函数的用法及一些常用的选择器
  3. windows 全局变量_如何在Windows中使用全局系统环境变量
  4. [设计模式]装饰模式
  5. 数据结构作业1 讲解和拓展
  6. kubernetes+docker
  7. project facets中没有dynamic_C++强制类型转换操作符 dynamic_cast
  8. C++回声服务器_6-多进程pipe版本服务器
  9. 用计算机弹出古诗,电脑屏保不断变化的诗句
  10. LetCode#69(JAVA)给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去.
  11. win10配置免密登录linux(centos7)
  12. 基于iReport5.5+JavaBean+Struts2(注解方式)的报表设计与查看
  13. uc游览器 android系统,手机UC浏览器2019最新版
  14. mysql usleep_date、sleep和usleep命令
  15. 陶瓷充电电池行业研究及十四五规划分析报告
  16. 计算机毕业设计基于Android宠物领养救助系统app
  17. 禁用计算机服务,win7系统禁用不需要服务的操作方法
  18. vr虚拟现实计算机配置,什么样的电脑配置才能玩得起VR?
  19. 每天十分钟学好ES6--关于解构赋值的彩虹屁
  20. 万州二中2021高考成绩查询,万州二中2019年高考喜报(二)

热门文章

  1. 我在赶集网这l两个月
  2. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java宜居家居用品网jte0e
  3. unity游戏开发入门-声音控制游戏
  4. redis 查看list列表
  5. pb调用精伦电子sdtapi.dll读卡函数的心得
  6. Adobe Audition频谱分析应用
  7. 追剧必备电视盒子软件:电视家陪你一起追《谢谢你医生》
  8. 刘云浩:群智感知——从主动击发,到无意识配合(众包思想的延展)
  9. 大数据导论期末大作业
  10. Revit二次开发-资源汇总(书籍、网站、案例...)