Skip to content

juliantan/FangSpider

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

房天下网爬虫

一、项目背景

       随着现如今房价的上涨,全国各地的房子也被炒的愈来愈激烈,各大热门城市的房价也是让人望而却步。正是在这种现状下,让我对各地的房价很好奇,到底现在的房价是一种什么态势。

二、目标

       房价的数据来源有很多,如链家网、安居客网、房天下网。经过观察房天下网的数据比较详细,且数据比较完整。因此,以房天下网的房源来分析。获取的字段主要有楼盘名、楼盘所在省市、区、建筑面积、总价、均价等信息。
如图所示(红框中为待爬取的楼盘信息):

三、项目准备

1、Python == 2.7

2、Scrapy == 1.4.0,一个Python爬虫框架,Win7和Linux下均可用pip install scrapy 安装,这里不做详解。

3、Scrapy_redis == 0.6.8,用于scrapy分布式扩展(scrapy默认只能单机版),安装同上,命令pip install scrapy_redis。

4、Redis == 3.2,用来做数据缓存和去重。

5、MongoDB == 3.4.3 ,用来存储最终爬取到的房源数据。

6、pymongo == 3.5.1,Python操作MongoDB的工具库。

       之前写的爬虫都是以单机的Scrapy为主,速度非常慢(家里的6M电信宽带,i7 8G的主机,房天下网的新房数据抓了一天一夜也没抓完,抓到最后访问还超时了。。。)。所以这次使用redis分布式的方式提高速度,并且将之前的Mysql数据库换成了MongoDB,究其原因,这里引用segmentfault上的一段更合理的解释(对爬虫抓取的数据进行分析该用MySQL还是mogodb?),简要概括就是:

        Mysql具备RDBMS 的常见特性,RDBMS在实际应用中对NoSQL的主要优势就是强事务。但是!在OLAP(联机分析处理)的应用上,强事务没有太多用武之地,却阻碍了分布式支持。在充分发展的前提下,最终水平扩展会成为你选择MySQL的主要瓶颈。另外对于爬虫这样的应用,爬取的通常都是非结构化数据,在关系模型的存储和查询上面都有很大的局限性。但也有一个可能性是你感兴趣的网站都是同样类型的网站,你只对网页上的特定内容有兴趣,这样可以把它们组织成结构化数据,从而在这方面MySQL仍然是可以胜任的。但就算这样,随着应用的发展将来在数据存储的灵活性上仍然会有所牺牲。所以对爬虫这样的应用,MySQL的主要问题是数据模型不够灵活和无法(或者说比较难)水平扩展。

四、网页分析

       以帝都的楼盘为例分析。进入新房页面。

       其中有三种搜索方式:楼盘搜索、户型搜索、房源搜索。我们主要以抓取房源为主,所以以房源搜索下的内容来抓取。url地址为:http:/ /newhouse. fang.co m/house /s/c9y/ ,这个即为后面需要用到的start_urls参数。其实这里简化了一些步骤,比如目标地址应该是http:/ /bj.fang.com/ 首页,从这个入口地址获取新房的url,再拼接房源搜索的url,而这里直接使用房源搜索的url。
       这里我们需要新房页面中的各个楼盘的链接地址。打开Chrome分析工具(这里用的是Chrome浏览器),如图可以发现:每一页中的每个房源都包含在了<div class="contentList fl clearfix">标签中,我们的需要的楼盘链接就在该标签中。该标签中最后还包含了分页标签<div class="page" id="sjina_D25_101"> 。        我们再分析下分页栏。


       下一页的url是在原地址 http: //bj.fang.com/ 的后面添加了/house/s/b**-c9y/。 至此我们通过以上信息可以获取到每个分页的楼盘链接了。
       接下来,我们分析下单个楼盘页面。

       在图中可以看到,我们最终所需要的信息就在<div class="fr ml20">标签中。
       通过上述分析后,接下来我们的抓取任务就轻松多了。

五、实现

未完待续。。。

About

房天下网爬虫

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages