/chaoxiubang

爬取www.chaoxiubang.com网站的美女写真图片,并存储到本地,把每个写真集的介绍存储到MySQL

Primary LanguagePython

美女写真集爬取

用Scrapy爬取www.ycgkja.com所有分类的图片,并根据分类以及写真集名称实现分目录存储。

网站结构

首页 --> 12个category --> 每个category的所有写真集(里面有分页) --> 每个写真集的图片(获取每个页面的图片url) --> 图片分目录下载

目录结构

如图所示:

爬取的数据

对于每一个分类,获取到的数据如下:

  • category: 写真集分类
  • url: 写真集每张图片的url链接
  • title: 写真集标题
  • update_time: 更新时间
  • click_amount: 点击量
  • tags: 标签
  • content: 写真集简介

针对于爬取到的数据,这里只对下面的三个字段进行处理,category和title进行创建目录,根据url对图片进行下载。 (如果要在本机运行此示例代码,注意修改下对应的文件路径,settings.py中的IMAGES_STORE)

问题处理

  • response.meta 传值发生覆盖

在处理的时候发现response.meta传值的过程中发生了覆盖,把所有的图片都存入了一个目录中。 错误原因:二者公用的是同一个内存地址,使用深拷贝来拷贝内存地址,这样可以避免上面的错误。

  • 点击量获取

在代码解析的过程中,点击量不能获取到,看了下代码结构,发现那是通过js动态响应的值,所以在这里加了个从js中获取值的解析。

数据存储错误分析

MySQL数据库中存储的是获取到的7个字段,存储到本地。

数据库的创建语句已经给出了,里面的SQL已经测试通过。下面是写SQL的过程中遇到的问题。

  • not all arguments converted during string formatting

执行insert的时候前后字段数量不一样

  • Error 1064

MySQL语法错误

爬取速度

预计总共有6万张左右的照片需要下载,下面是在本地win7系统测试的结果。

  • 图片下载速度

如下图所示,这里下载了部分图片,耗时大约6个小时,所以6万张图片如果全部都存储到本地,则大约耗时18小时左右。(预计如果在Linux或者Mac上面速度可能会更快)

  • MySQL数据存储速度

下面发送邮件目录的图片中有爬取耗时,爬虫内部自动记录了爬虫开始的时间以及结束时间。不过观察这两个时间发现,并不与本地的时间(北京时间)一致,所以估计应该是UTC时间。

  • MySQL数据存储以及图片下载

如果说把代码全部放到一起的话,预计爬取耗时会在一天左右,毕竟图片下载相对比较耗时。

发送邮件

当爬取结束以后,通过发送邮件提示爬虫已经爬取结束,邮件内容为Scrapy内置的内容,并没有进行修改。

发送邮件只需要配置settings.py文件的相关字段即可,其它地方没有进行修改。

修改配置如图:

爬虫代码结束后邮件内容如图所示: