软件运行环境是什么?
python 3.50 -- 解释器
scrapy库 -- 爬虫框架
pymsql库 -- 连接mysql数据库
pillow库 -- 下载图片
目标网站是什么?
伯乐在线:http://blog.jobbole.com/ 所有的技术文章
需要爬取哪些数据?
文章对应的url cont_url varchar(512)
文章标题 title varchar(36)
文章发布时间 publish_time data(1970-1-1)
文章内容 cont longtext
对应图片url img_url varchar(512)
下载对应的图片 scrapy带的下载器
文章点赞数 like_num int(12)
文章收藏数 collection_num int(12)
文章评论数 comment_num int(12)
对于这些数据如何设计表?
每个数据都是文章的详情页面的唯一数据,不存在冗余数据,所有一张表就可以了
表名:jobbole_article
主键:把文章对应的url进行md5处理,做primarykey varchar(64)
事先把数据表建立起来,pymysql只需要插入数据就行了
如何进行事先分析?
打开这个域名,浏览一下网页,分析网页的域名设计,分析有没有显示全部文章的url,发现 “最新文章” 这个链接地址,直接把所有的文章都显示出来,就以这个为起始网页,这个网站为:http://blog.jobbole.com/all-posts/
分析这个网页可以获得的数据,发现可以获得详情文章页面url有20个、文章对应的图片、下一页的url,通过详情页面,进入可以爬取符合需求的值,通过下一页url,就可以获取下一页的所有文章详情的url
边界值分析:
试着点开第二页,分析上一页url和下一页url区别
试着点到最后一页,发现没有下一页url,这时爬虫应该结束了,需要对爬取下一页的url进行逻辑判断处理
如何逻辑实现?
- 定义一个函数在http://blog.jobbole.com/all-posts/页面中解析详情文章页面所有的url,交个scrapy下载器去下载,并把下载好的页面交个另外解析函数去获取有效字段,解析获取的图片url,交给scrapy图片下载器去下载
- 获得初始数据,然后对初始数据进行格式化处理,去脏处理,获取有效数据
- 把有效的字段,通过pymysql连接数据库,并写入数据库
逻辑结构如何?
该爬虫分为:5个逻辑结构
解析文章简介页面
解析文章详情页面
获得原始数据
数据去脏处理
写入数据库(通过gevent的协程实现存储)
出现的问题?
如何异步实现数据库的插入?
通过协程实现对数据的插入
如何自动下载图片并且获得图片下载的路径?
通scrapy自带下载器,和重新定义scrapy的imagepipeline中一个方法获得