爬淘宝的商品信息下 (下) -- 实现定时任务爬取
爬淘宝的商品信息下 (下) -- 实现定时任务爬取
上回我们讲到用scrapy爬取淘宝的商品信息, 今天的任务是实现爬虫的周期作业功能。商品信息的交易量评论数,等等,会处在变动之中,因此需要爬虫能够在每天预设的时间爬取网页。
假设,我们现在的任务是,要爬虫在凌晨3点,也就是 每天的凌晨3:00,(对,就是那个月黑风高,四下无人的夜晚,悄悄的,爬虫它来了,然后悄悄地又走了,)进行一次爬取任务。
main.py就是我们要写的文件,话说,scrapy爬虫,不一定非得要用scrapy命令才能去调用,我们可以直接从脚本中调用,嗯,很好,狠喜欢。
整个scrapy项目的结构如下所示,看到main.py了吗?没错,直接放在根目录下就可以了,妥妥的,就是这么简单
D:\Code\TB>tree /f
文件夹 PATH 列表
卷序列号为 0000007D E659:980C
D:.
│ main.py
│ scrapy.cfg
│
├─.idea
│ │ misc.xml
│ │ modules.xml
│ │ TB.iml
│ │ workspace.xml
│ │
│ └─inspectionProfiles
│ profiles_settings.xml
│
├─results
│ result.2017-05-11.csv
│
└─TB
│ items.py
│ middlewares.py
│ pipelines.py
│ settings.py
│ __init__.py
│
├─spiders
│ │ taobao.py
│ │ __init__.py
│ │
│ └─__pycache__
│ taobao.cpython-36.pyc
│ __init__.cpython-36.pyc
│
└─__pycache__
items.cpython-36.pyc
pipelines.cpython-36.pyc
settings.cpython-36.pyc
__init__.cpython-36.pyc
下面直接上mian.py的代码,废话不多说
from scrapy.utils.project import get_project_settings
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging
from twisted.internet import reactor
from apscheduler.schedulers.background import BlockingScheduler
import multiprocessing
scheduler = BlockingScheduler()
def release_spiders():
configure_logging({'LOG_FORMAT': '%(levelname)s: %(message)s'})
settings = get_project_settings()
runner = CrawlerRunner(settings)
for spider in runner.spider_loader.list():
runner.crawl(spider)
d = runner.join()
d.addBoth(lambda _: reactor.stop())
reactor.run()
@scheduler.scheduled_job('cron', hour=3, minute=0, id="daily_crawl")
def run():
process = multiprocessing.Process(target=release_spiders)
process.start()
if __name__ == "__main__":
scheduler.start()
除了scrapy以外,还用到了多进程multiprocess包,定时任务调度apscheduler包,貌似前一个包,默认就有,而后面一个,要自己安装的。。。。
为什么要开启多进程。。。。?你以为我想啊,折腾了好久,发现如果不开多进程的话,webdriver不会自动关闭,而且,pipline中的数据存储也不工作,神烦啦!。。。。。。。所以,还是再开个进程,让定时任务和爬取任务分开,各玩各的!
@scheduler.scheduled_job('cron', hour=3, minute=0, id="daily_crawl")
这个地方就是设置定时任务的执行时间点,24小时制,所以,会在每日的凌晨3点0分,进行一次爬取任务,半夜人少,网速快,偷偷地,刺激,没毛病。
好了,就这样了,具体代码,已经上传到github了,下载地址https://github.com/Levstyle/TaobaoSpider, 只要执行main.py代码文件即可
如果有毛病,请直接跟俺说啊,反正我也不会改的
相关文章
- mybatis源码学习--spring+mybatis注解方式为什么mybatis的dao接口不需要实现类
- C实现通用数据结构--单链表
- Java实现 LeetCode 480 滑动窗口中位数
- Java实现 LeetCode 432 全 O(1) 的数据结构
- Java实现 蓝桥杯VIP 算法提高 传染病控制
- Java实现 蓝桥杯VIP 算法训练 Car的旅行路线
- java线程--volatile实现可见性
- thinkphp:redis+lua实现短信发送频率限制(thinkphp v6.0.12LTS)
- 实现推拉效果显示图片
- 通过代码生成机制实现强类型编程-CodeSimth版
- flink 并行计数器实现
- Angular应用从Component到Html的数据绑定是如何实现的 -数据流的讨论
- atitit.按钮光标滑过高亮切换以及其他动态效果的实现css html js --attilax总结
- 基于共享储能电站的工业用户日前优化经济调度(Matlab代码实现)
- 【Python成长之路】从零做网站开发 -- 下拉选择项的实现
- Python项目学习二:项目2:绘制图表--初次实现
- Python项目学习一:项目一:自动添加标签--再次实现
- python实现--参数估计
- Android自己定义控件--下拉刷新的实现
- 《TCP/IP作品详细解释2:实现》笔记--Radix树路由表
- 一个非常有用的辅助类 -- 阈值类的实现
- 【计算机三级数据库技术】第4章 数据库应用系统功能设计与实现--附思维导图
- 实战--ffmpeg与sdl实现最简单的视频播放器
- 【SpringBoot系列】最详细demo-- 怎么不用定时任务实现关闭订单
- 基于JAVA实现的WEB端UI自动化 - WebDriver高级篇 - 验证码处理
- 【云原生 | Kubernetes 系列】--Gitops持续交付 CD Push Pipeline实现