Skip to content

leiyang23/mm_spider

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

妹子图(mzitu.com)增量爬取

简介

全站图片爬取,增量更新。
图片按照专辑保存,保留了图片合集与标签的关联关系。
主要依赖库:

  • asyncio
  • aiohttp
  • SQLAlchemy

主要特点: 使用官方的asyncio库和第三方aiohttp进行异步爬取,可以自定义协程数量来控制爬取速度, 在不影响网站正常运行的前提下学习Python的异步编程。

代码

表结构

  • Collection 合集表,用来记录图片合集的相关信息,是核心数据表。
  • Tag 标签表,每个合集关联多个标签。
  • DownloadRecord 数据获取记录表,记录合集数据和合集图片的获取记录,增量更新关键。

核心逻辑

核心逻辑封装在 spider.py 中的 MMSpider 这个类中。
主要分 3 步。

  1. 用来从网站获取合集编号。
  2. 根据第一步获取的合集编号爬取合集信息并入库。
  3. 根据第二步获取的合集信息进行下载图片。

这 3 步既可以按顺序执行,也可以单独执行,并没有强依赖关系。之间是通过数据库进行连接。

使用

首先根据requirements.txt配置环境: pip install -r requirements.txt
源码下 python spider.py /your/path,默认下载文件放在当前目录下。

由于没有配置代理IP等措施,爬取速度设置的比较慢。
默认爬取主站网页开启 2 个协程,下载图片开启 5 个协程, 之后运行会自动比对数据库数据和网站数据,进行增量更新,下载过的图片也不会重复下载。 更多细节可以查看代码注释。

文件夹 部分截图

心得

如果协程中出现错误(传入的参数非法等)时,有时程序并不会报错,而是一直挂起。调试起来特别难受,所以使用协程时一定 要小心再小心。
主线程内保证一个事件循环(Event loop),若是单进程程序,就是只能有一个事件循环。

严正声明:仅供学习交流,请勿对网站正常运行造成影响。

About

图片网站全站增量爬取

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages