最近学完了慕课网的爬虫课程,决定自己动手实现一个通用的爬虫,爬取网站的规则记录在数据库中,通过程序读入,然后初始化爬虫
的配置进行爬取。
model
article
爬取到的文章的信息
1 | DROP TABLE IF EXISTS `article`; |
website
网站信息
1 | DROP TABLE IF EXISTS `website`; |
为了测试,插入了两个网站的数据:
1 | INSERT INTO `website` VALUES ('5', '游久网', 'u9', 'news.uuu9.com', 'http://news.uuu9.com/List/List_1409.shtml', '.*', '.*\\/\\d+\\/\\d+.shtml', '.robing_con.cl h1::text', '#content', '.robing_con.cl h4::text', '1'); |
sqlalchemy
对象关系映射(Object Relational Mapping, ORM)工具采用sqlalchemy
使用示例
1 | from sqlalchemy import create_engine |
基于sqlalchemy的pipeline
该处目前是同步阻塞式的,以后为了加快入库速度可以改成异步非阻塞的
1 | from AyouSpider.model.article import Article |
spider
使用scrapy-redis
做分布式爬虫,故spider
继承自RedisCrawlSpider
,同时爬虫的参数由构造函数传入
1 | import datetime |
启动爬虫
启动爬虫时需要先从数据库中查询到待爬网站的信息,然后将改对象作为参数传递给ArticleSpider
,由于scrapy-redis
需要从redis中读取start_urls
,故需要先将start_urls
添加到redis
中,如下所示:
1 | from scrapy.crawler import CrawlerProcess |
参考
TODO
- 读取配置文件
添加新的网站后如何使其生效
写一个启动单个爬虫的脚本
爬虫部署管理
- django-dynamic-scraper