django+spider简易爬虫搭建

时间:2024-03-04 19:09:19

今天有空,记录一下搭建爬取链家北京二手房房价的过程,其目的是为了记录每套房源的房价调整过程。我记得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项目拷贝到爬虫项目中
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秒左右。
    结果展示
    这里写图片描述

这样,基本能用了。您可以访问小小房虫 感受一下