Scrapy 爬取网站图片与壁纸 -- 爬取网易阴阳师壁纸篇

文章目录第三步:运行爬虫项目
引言
大家好!这一期的文章来跟大家讲讲如何使用框架实现对网页上图片的爬取并大量下载 。我们以网易旗下的阴阳师手游为例 , 给大家演示一下游戏壁纸的抓取过程 。
第一步:分析网页 html 结构
首先 , 我们打开阴阳师手游的官网 , 进入到游戏壁纸下载页面:
将网页下拉 , 我们还能看到更多的排成三列的壁纸图片:
按F12打开控制台 , Shift + Ctrl + C 组合键开启查看网页元素的模式 , 然后将鼠标移动到某一张壁纸上面 , 选择一个分辨率按钮点击 , 我们可以看到相对应的图片标签:
知道了图片url的信息 , 并不代表这些元素一定包含在网页的静态页面里 。为了确保我们的爬虫能够从网页中拿到这个标签 , 我们来右键点击页面 , 查看网页源代码:
进入网页源码后 , 将页面往下拉 , 我们可以看到一个个 img 标签以相同的形式分装在不断重复的 div 里面:
每一个壁纸的图片地址 , 都封装在一个 item 下的 cover 下的 mask 中 , 我们只需要用 CSS 选择器或者 XPath 选择器匹配这些标签就能够顺利获取图片地址 。好 , 很有精神!接下来让我们开启一个爬虫项目来爬取这些壁纸吧 。
第二步:使用框架构建爬虫程序 配置 .py
工欲善其事 , 必先利其器 。首先我们在 .py 文件中配置好IMAGE相关的属性:
定义了我们之后获取图片URL的字段 , 我们将这个字段名设置为。
给出了图片保存的目录位置 , 我们把爬到的图片放在 [项目位置]//yys 文件夹下 。
【Scrapy 爬取网站图片与壁纸 -- 爬取网易阴阳师壁纸篇】 给出了不重复爬取图片的天数 , 定为90天 。
items.py 文件下创建图片 item 类
打开 items.py 文件 , 新建一个类 , 命名为。这里一定需要一个字段 , 之后会通过对该字段中的图片地址请求下载 。
class WallpaperYYSItem(scrapy.Item):image_url = scrapy.Field()
创建文件
在你的项目目录下 , 通过[] [url] 开启一个爬虫文件:
scrapy genspider wallpaperYYS https://yys.163.com/media/picture.html

Scrapy 爬取网站图片与壁纸 -- 爬取网易阴阳师壁纸篇

文章插图
打开 /.py , 我们将类下的相关属性改为:
parse 函数书写
接下来就是我们的重头戏了 , 定义 parse 函数 。这里的几个关键步骤为:
def parse(self, response):_getSize = lambda x: int(x[0]) + int(x[1])image_nodes = response.css('.item .cover .mask')for image in image_nodes:wallpaperF = image.css('a:nth-child(1)')wallpaperL = image.css('a:nth-last-child(1)')sizeF = _getSize(wallpaperF.xpath('text()').extract_first().split('x'))sizeL = _getSize(wallpaperL.xpath('text()').extract_first().split('x'))if sizeF > sizeL:image_url = wallpaperF.xpath('@href').extract_first()else:image_url = wallpaperL.xpath('@href').extract_first()wallpaper_item = WallpaperYYSItem()wallpaper_item['image_url'] = [image_url]yield wallpaper_item
创建自定义的
在 .py 文件中继承创建一个新的。这里其实什么也不需要改 , 使用原来有的功能就行 。
class YYSImagesPipeline(ImagesPipeline):def item_completed(self, results, item, info):return item