需求
爬取csdn最新文章并记录到数据库
分析
通过浏览器查看前3页的列表数据请求, 总结出url的动态规律
第1页:https://www.csdn.net/api/articles?type=new&category=newarticles&shown_offset=1537075945594796&first_view=true
第2页:https://www.csdn.net/api/articles?type=more&category=newarticles&shown_offset=1537075894000000&first_view=false
第3页:https://www.csdn.net/api/articles?type=more&category=newarticles&shown_offset=1537075870000000&first_view=false
则动态的url如下:
https://www.csdn.net/api/articles?type={0}&category=newarticles&shown_offset={1}&first_view={2}
当请求第1页时, type=new,first_view=true ; 往后翻页时,type=more, first_view=false, shown_offset取值于上一页请求的返回
类似这种前端分页, 为了防止用户翻页时, 数据库有新的记录生成造成前端重复显示, 分页参数的值一般都会由后端控制,后端会给前端返回一个‘时间戳’或‘数据Id’用于下一页请求,比如csdn的shown_offset,这种值一般取自上一页数据的最后一条记录.
开发/设计
语言/工具
python3,基于scrapy框架
idea,安装python插件
mysql数据库
功能
列表数据分页爬取、解析
列表数据解析时可以继续爬取详情数据
数据记录到数据库,已存在的禁止重复爬取
输出日志文件
分环境部署dev,test,prod
源码
码云: https://gitee.com/wangxu3655/csdn-newarticle-spider
运行方式: scrapy runspider spider.py
部署
如果基于scrapy的爬虫做到了一定的量级,部署方案可考虑官方推荐的scrapyd
如果爬虫较小,想在linux下快速部署, 可以考虑crontab命令, 定时运行爬虫, 如下:
# 每天9点~23点的第30分钟执行一次
30 9-23 * * * /usr/local/python3.6.0/bin/scrapy runspider /usr/local/apps/csdn-newarticle-spider/spider.py >/dev/null 2>&1
测试数据结果: