全站图片爬取,增量更新。
图片按照专辑保存,保留了图片合集与标签的关联关系。
主要依赖库:
asyncio
aiohttp
SQLAlchemy
主要特点: 使用官方的asyncio
库和第三方aiohttp
进行异步爬取,可以自定义协程数量来控制爬取速度,
在不影响网站正常运行的前提下学习Python的异步编程。
Collection
合集表,用来记录图片合集的相关信息,是核心数据表。Tag
标签表,每个合集关联多个标签。DownloadRecord
数据获取记录表,记录合集数据和合集图片的获取记录,增量更新关键。
核心逻辑封装在 spider.py 中的 MMSpider
这个类中。
主要分 3 步。
- 用来从网站获取合集编号。
- 根据第一步获取的合集编号爬取合集信息并入库。
- 根据第二步获取的合集信息进行下载图片。
这 3 步既可以按顺序执行,也可以单独执行,并没有强依赖关系。之间是通过数据库进行连接。
首先根据requirements.txt
配置环境: pip install -r requirements.txt
源码下 python spider.py /your/path
,默认下载文件放在当前目录下。
由于没有配置代理IP等措施,爬取速度设置的比较慢。
默认爬取主站网页开启 2 个协程,下载图片开启 5 个协程,
之后运行会自动比对数据库数据和网站数据,进行增量更新,下载过的图片也不会重复下载。
更多细节可以查看代码注释。
如果协程中出现错误(传入的参数非法等)时,有时程序并不会报错,而是一直挂起。调试起来特别难受,所以使用协程时一定
要小心再小心。
主线程内保证一个事件循环(Event loop),若是单进程程序,就是只能有一个事件循环。
严正声明:仅供学习交流,请勿对网站正常运行造成影响。