/// 博客迁移:http://blog.timeash.cn
今天有空,记录一下搭建爬取链家北京二手房房价的过程,其目的是为了记录每套房源的房价调整过程。我记得12~13年的时候,链家app是可以看到每套房源的价格波动的,现在的app不行了。
工程搭建
python django spider
- 创建django 工程
django-admin startproject houseSpider
cd houseSpider
python manage.py startapp dbmodel # 这里增加一个app,用于数据库操作
- 创建 spider
scrapy startproject lianjiaSpider
* 这两个命令非常相似,scrapy整体框架实现上与Django框架原理很相似,两者都强调松耦合,高度的抽象使编程简单、简洁化,与python设计理念是一致的 *
让spider爬去的数据存入数据库
django给我们提供ORM模型极大的方便了我对数据库的操作,现在我要做的是让spider的item直接使用models.py,之前的博客已经有了该怎么操作–> Django的models.py在外部独立使用 <–
1. 将创建的django项目拷贝到爬虫项目中
- houseSpider是网站,里面有dbmodule,houseSpider,其余的文件是爬虫文件,不要动他们。
这时,我们发现spider 有一个settings.py , django里也有一个settings.py,这两个文件可以合并
- 创建一个爬虫
scrapy genspider ljershoufang 'bj.lianjia.com'
- 注意下面的这句话
os.environ['DJANGO_SETTINGS_MODULE'] = 'houseSpider.houseSpider.settings'
这句话需要在每个爬虫里加上,要不然是用不了models的
大概的方法是这样的,中间有写细节问题,我没有及时记录,记不清了。当网站可以运行了,我们就要考虑数据处理的问题了。
数据处理
每日爬去的数据大概有25000左右,我想做的是跟踪每个房源的价格,比如今天200万,明天190万,后台220万,这种都需要对比的。开始的方法是这样的。
* 原始数据,没有经过任何的加工处理,直接存入数据库,查询的时候动态计算。结果耗时是巨大的,展示2000条数据需要大概10分钟,不能忍。
优化1. 开启n个线程,把所有的数据分n片,各种group by 然后汇总结果,期间学习了不少多线程的知识,展示2000条数据大概5分钟,不能忍。
优化2. 爬去数据的时候,后台自己处理。查询数据不做任何计算。展示2000条数据1秒左右。
结果展示
这样,基本能用了。您可以访问小小房虫 感受一下