Python爬虫建站入门手记(3):采集入库

432 查看

上回,我已经大概把爬虫写出来了。
我写了一个内容爬虫,一个爬取tag里面内容链接的爬虫
其实还差一个,就是收集一共有哪些tag的爬虫。但是这里先不说这个问题,因为我上次忘了 这次又不想弄。。
还有个原因:如果实际采集的话,直接用http://segmentfault.com/questions/newest?page=1这个链接 获取所有问题,挨个爬就行。

进入正题

第三部分,采集入库。

3.1 定义数据库(or model or schema)

为了入库,我需要在Django定义一个数据库的结构。(不说nosql和mongodb(也是一个nosql但是很像关系型)的事)
还记得那个名叫web的app么,里面有个叫models.py的文件,我现在就来编辑它。

内容如下:

都很直白,关于各个field可以看看 Django 的文档

然后,我需要告诉我的python_spider项目,在运行的时候加载web这个app(项目不会自动加载里面的app)。

在INSTALLED_APPS里面加入web:

下面,就可以用django自动生成数据库schema了

现在,我~/python_spider目录就产生了一个db.sqlite3文件,这是我的数据库。
把玩一番我的模型

以上操作结果正常,说明定义的models是可用的。

3.2 入库

接下来,我需要把采集的信息入库,说白了,就是把我自己蜘蛛的信息利用django的ORM存到django连接的数据库里面,方便以后再用Django读取用于做站。

入库的方法太多了,这里随便写一种,就是在web app里面建立一个spider.py, 里面定义两个蜘蛛,继承之前自己写的蜘蛛,再添加入库方法。

代码如下:

  1. 这个地方写得很笨,之前该在SegmentfaultQuestionSpider加上这个属性。
  2. 创建或者获取该提问的tags
  3. 创建或者获取提问,采用sf_id来避免重复
  4. 把tags都添加到提问,这里用*是因为这个方法原本的参数是(tag1, tag2, tag3)。但是我们的tags是个列表
  5. 测试的时候方便看看进度

然后,测试下我们的入库脚本