划一下重点:本文更适合于有一定的爬虫基础的人来学习
最好需要对scrapy框架有一定的了解,(没有的话也没关系,来看个思路)
由于文章篇幅和图片数量限制,我不太可能一步步分析过程全部截图和用文字说出来,所以需要自己研究,觉得不懂的话我会将源码获取方式放到底部。
当前时间是2020-3-2,只能保证相差不远的时间爬虫有效,毕竟网页结构会变。

前言:

前两天使用爬虫爬取了房天下全国六百多个城市所有的新房和二手房信息,包括小区名字房子面积,原始url,几居几室,位置地址等数据信息。
代码量看起来有点多,但是大部分都是框架自带的代码,整个爬虫的逻辑很简单。
本爬虫爬取的内容没有使用ajax异步请求加载的,所以相对简单。
我会放一部分爬取下来的数据的截图放在文末

前期准备:

  • 安装scrapy库: pip install scrapy

用到的库

  • re(内置)
  • scrapy(需要安装)
  • random (内置)

分析需求:

我们要爬取的网站是房天下全国所有的城市的新房和二手房信息,首先进入房天下官网查看页面

显然这里不方便作为我们爬虫的开始页面,爬虫爬取网站需要一个结构化一点的,信息聚集排列比较整齐的页面。
经过一番查找进入到这个页面城市页面

ok从这里我们已经完全可以拿到所有城市的入口页面,是一个很理想的开始页面。

这里的每个城市都是一个链接,代表对应城市的房天下首页。
从这个页面中呢,我们让scrapy爬取所有的省份和它对应的城市,以及这个城市对应的首页链接。(通过审查元素,这个页面没有ajax异步加载,放心!)

例如,上海的首页链接就是http://sh.fang.com/

然后我们就可以从这里获取到它的新房列表页面和二手房列表页面。

我们依旧以上海为例,上海的新房页面链接和二手房页面链接分别是:
https://sh.newhouse.fang.com/house/s/
https://sh.esf.fang.com/
发现规律没有?

新房链接 = 首页链接中间 插入 .newhouse. + 首页链接末尾 加上 house/s/
二手房链接 = 首页链接中间插入 esf.

有了这个规律,现在就相当于我们从城市列表就能直接获取到所有城市的新房列表和二手房列表的url,这就很nice! (反正我是拼接获取到了,你们加油,手动狗头)

现在我们先分析新房的页面

经过分析我们可以知道

所有的这些一个个类似列表的盒子是一个个li元素(这里负责任的告诉大家,我不可能是打广告的,哪有通过教你们爬虫来给它打广告的方式。)

然后我们获取li元素列表

这里需要提醒大家的是,前两个li元素是ajax异步加载的,我估摸着应该是花了钱打广告上去的,这一部分我们不需要爬取。同时,获取li元素列表的时候,会发现li元素列表里面有个奸细,会导致你出错,看图⬇️

通过上面这张图,大家对它的内容的排放也有基本了解了。
然后我们开始分析我们需要从每个li元素里面获取的内容

好了这些就是我们要爬下来的内容,全部都在li元素里面,由于这里就是一些重复的工作,我就不带大家一一分析了。
好我这里就当大家能爬取出每个li元素里面的内容了哈,我们进入下一个部分
当前我们只爬取了这一个页面,而就算爬完所有城市也不过每个城市爬了一个页面而已,我们要能够翻页。

下一页的网址就藏在这里,很好找,我们提取出这个元素里面的href属性,再用sh.newhouse.fang.com/来拼接一下,就成功得到下一页的网址了。

我们进入下一页,再爬下来想要的数据存储,再进入下一页,周而复始,直到最后一页,没有了这个下一页的元素会自动停止。

到这里呢,新房的数据就全部爬取完成!我们进入二手房页面分析元素

同样的,这里的列表一样的内容都是一个个dl元素组成的,但是这里就没有广告位了(我的理解是,个人毕竟没有这么多钱来打广告嘛)。

但是与新房页面相同的是,这里同样藏着个奸细,观察上图的审查元素可知,有一个 dl元素的style="bgcomare"而其他的都是bg这就是奸细!

我们在获取dl列表的时候同样需要抛弃这个元素。

然后呢就进入到了内容爬取时间

这些就是需要爬下来的内容了。
啪嗒啪嗒,一顿分析元素获取文本内容之后~
现在进入翻页时间,我们分析一下下一页元素

这个时候你会发现,这里的p元素只能用序号来定位,而没有专门的class名或者id名,本来呢,这也不是什么大问题,但是偏偏现在这个p的顺序位置是在变动的,

因为当我们处于第一页的时候,前面没有出现首页上一页这两个按钮,而这两个按钮也是同级的p标签!

所以这里我们采用倒序,倒数第三个p标签,就是下一页本尊。

这里可能有人要发问了:那照这么说,到了最后一页获取p标签不是还会出错?

这里跟大家解释一下,当到了最后一页的时候,确实下一页第xx页就消失了,倒数第三个p标签反而跑到前面的页面去了,会不会造成无限循环?

答案是:不会,因为我们使用的scrapy框架,这个框架有自动调度,不重复抓取同一个页面的功能。

数据存储

使用scrapy的管道来进行存储,因为这些数据我拿着也没用,就直接用一个json文件将爬到的数据存储了起来,同样在源码当中。

数据展示

新房数据

二手房数据

末尾

到这里呢,我们已经基本爬取完成了房天下网站所有城市新房二手房的数据了,没骗你们吧,就是这么简单。

提醒大家一句哈,由于数据量太大, 记得设置延迟,不要对人家服务器造成压力,做人留一线,然后就是,scrapy爬虫记得添加暂停功能。

scrapy全站爬虫源码获取方式:关注微信公众号【阳仔不想当码农】后台发送房天下爬虫

我是落阳,一个正在努力成长的人,谢谢你的到访!

一整个网站的全部数据,我只能给你这么多了。相关推荐

  1. 【转】2.1 SharePoint服务器端对象模型 之 访问网站和列表数据(Part 1)

    本节将会介绍SharePoint中最为常用的一些对象模型,以及如何使用这些对象模型来访问和操作网站中的数据.几乎所有的SharePoint服务器端开发都会涉及到这些内容,因此应着重掌握本节中所介绍的基 ...

  2. 某银行存储瘫痪、缺失6个小时数据,只能人工补录

    某银行存储瘫痪.缺失6个小时数据,只能人工补录:因容量扩容操作触发光纤桥接器固件程序缺陷,造成大量磁盘在短时间内出现故障导致 转自@云头条 国内某银行生产中心存储设备发生故障,导致包括核心业务系统在内 ...

  3. 爬虫学习——批量在中国气象中心网站检索下载数据

    批量在中国气象中心网站检索下载数据 前几天嗓子不舒服之后就病了,不过现在好一点.最近师哥喊我通过国家气象中心网站帮他下载时间跨度比较长的气象数据,但是这个网站对不同的数据集检索有日期要求,也就是说有的 ...

  4. 四十一、完成scrapy爬取官方网站新房的数据

    @Author:Runsen 文章目录 前言 分析网页 新建项目 加请求头 搞定item 首页调试 详情页调试 保存json 前言 在前几天,接到一个大学生的作业的爬虫单子,要求采用scrapy爬取链 ...

  5. Python网页分析,分析网站的日志数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于大话数据分析,作者:尚天强 网站的日志数据记录了所有Web对 ...

  6. 系统检测到您正在使用网页抓取工具访问_从网站抓取数据的3种最佳方法

    halo,大家好,我是特仑苏,今天呢给大家分享一些Python从网站抓取数据的一些方法,希望可以给大家带来一些帮助! 原作者:Octoparse团队 原出处:作品文(从网站抓取数据的3种最佳方法)/网 ...

  7. ms office excel2013教程 - 从网站加载数据

    从网站加载数据

  8. 爬取某网站的潮汐数据

    爬取某网站的潮汐数据 import re,os import requests import datetime import random import timeheaders = {'User-Ag ...

  9. 哪些能恢复网站服务器的数据的方式呢?

    对于企业网站来说,数据库往往是服务器中最核心的部分,所以一旦数据库发生损坏,将会给企业带来巨大的损失,因此数据库的数据恢复功能变得越来越重要了.在服务器运行过程中,由于断电.操作不当或者是客观原因损坏 ...

  10. 如何爬一个网站的数据-免费爬取网站的任意数据软件

    如何爬一个网站的数据?爬取网络数据大家称之为网络爬行 收集页面以创建索引或集合.另一方面,网络抓取下载页面以提取一组特定的数据用于分析目的,例如,产品详细信息.定价信息.SEO 数据或任何其他数据集. ...

最新文章

  1. Skype for Business Server 2015-07-边缘服务器-3-部署
  2. kubeasz_使用kubeasz安装K8S集群,不受国内网络环境影响
  3. 实施TDD时的常见问题
  4. CSS样式为什么放在head中,而不放在body底部
  5. async-validator 表单验证两种数据的解决方案
  6. logback日志pattern_@Slf4j 实现日志输入到外部文件
  7. PHP如何读取excel文,PHP-php如何读取excel?
  8. python字符串相关习题
  9. 平板电脑安装软件_下载适用于华为和荣耀手机平板电脑的Googlefier GMS安装程序...
  10. #define中的三个特殊符号:#,##,#@
  11. Nodejs页面访问加载静态资源
  12. Android面试:说一下 LiveData 的 postValue ?与SetValue有什么区别?连续调用会有什么问题?为什么?
  13. k8s之ovs-cni
  14. 重设 Cisco 路由器ASA5505
  15. 【无标题】.NET?MemoryCache如何清除全部缓存学习通http://www.bdgxy.com/
  16. 有什么软件可以测试电脑的网速,电脑测网速软件哪个好 轻松测试网络性能
  17. hbase major compact脚本
  18. echart树图设置层级距离_echarts的树形结构图及参数
  19. 端午节论屈原之离骚和程序开发之离怨
  20. fir1截止频率计算_请教一下关于FIR滤波器的公式?

热门文章

  1. J2EE MVC模式框架中,表单数据绑定功能不安全实现在Tomcat下造成的DoS及RCE
  2. 前端学习总结【103天】:CSS——不用JavaScript实现tab标签切换的两种方法
  3. KVC 与 KVO 理解
  4. Symfony2插件FOSUserBundle的使用说明
  5. zookeeper核心原理(Watcher、事件和状态)
  6. com.github.pagehelper.PageHelper cannot be cast to org.apache.ibatis.plugin.Interceptor和oracle不识别
  7. Spring boot学习(七)Spring boot配置slf4j+logback日志框架
  8. 专家观点:Docker 架构优缺点大剖析
  9. Ansible之五:常用模块
  10. Hibernate4.3注解常见错误