Scrapy爬取王者荣耀皮肤

一、项目需求

爬取王者荣耀官网(https://pvp.qq.com/)所有皮肤图片

要求:

  • 英雄名作为文件夹名
  • 皮肤名作为图片名称
  • 皮肤图片按所属英雄存入对应的文件夹

二、项目解析

  • 定义items文件,设置hero_name、pf_names、image_urls、images字段
  • 分析网页,确定抓取思路
  • 设置spider文件,抓取所有英雄名称、皮肤名称、图片URL
  • 数据过多,设置下载中间件,伪装成浏览器
  • 设置item管道,重写管道类,继承ImagesPipeline,根据需求改变下载路径与图片名称
  • 设置整理settings文件
  • 处理bug

三、项目代码

items.py

import scrapyclass PvpqqItem(scrapy.Item):# define the fields for your item here like:hero_name = scrapy.Field()      # 英雄名称pf_names = scrapy.Field()       # 皮肤名称image_urls = scrapy.Field()     # 项目的图像URLimages = scrapy.Field()         # 有关下载图像的信息字段

pf.py

import scrapy
from ..items import PvpqqItemclass PfSpider(scrapy.Spider):name = 'pf'# allowed_domains = ['https://pvp.qq.com']start_urls = ['https://pvp.qq.com/web201605/herolist.shtml']def parse(self, response):pf_urls = response.xpath('//ul[@class="herolist clearfix"]/li/a/@href').extract()for pf_url in pf_urls:yield scrapy.Request(url='https://pvp.qq.com/web201605/%s' % pf_url, callback=self.pf_parse)def pf_parse(self, response):item = PvpqqItem()item['hero_name'] = response.xpath('//h2[@class="cover-name"]/text()').extract_first()# '圣骑之力&0|死亡骑士&1|狮心王&13|心灵战警&12' ==》 ['圣骑之力', '死亡骑士', '狮心王', '心灵战警']item['pf_names'] = response.xpath('//ul[@class="pic-pf-list pic-pf-list3"]/@data-imgname').re('(.*?)\&\\d+\|?')item['image_urls'] = []for num in range(1, len(item['pf_names'])+1):# //game.gtimg.cn/imgs/yxzj/img201606/heroimg/166/166-mobileskin-1.jpg# 去除-后面的字符,再重新进行拼接image_url_head = response.xpath('//a[@class="hero-video"]/img/@src').extract_first()[:-5]image_url = "https:{}{}.jpg".format(image_url_head, num)item['image_urls'].append(image_url)yield item

middlewares.py

import randomclass RandomUserAgentMiddleware(object):def __init__(self, user_agents):self.user_agents = user_agents@classmethoddef from_crawler(cls, crawler):# 在settings.py文件中加载MY_USER_AGENTS的值s = cls(user_agents=crawler.settings.get('MY_USER_AGENTS'))return sdef process_request(self, request, spider):# 随机设置User-Agent的值agent = random.choice(self.user_agents)# 将其赋给Requestrequest.headers['User-Agent'] = agent# proxy = random.choice(self.proxy)# request.meta['proxy'] = proxyreturn None

pipelines.py

import os
from scrapy.pipelines.images import ImagesPipeline
from . import settings# 继承ImagesPipeline类
class PvpqqPipeline(ImagesPipeline):# 此方法是在发送下载请求之前调用,其实此方法本身就是去发送下载请求def get_media_requests(self, item, info):# 调用原父类方法,发送下载请求并获取返回的结果(request的列表)request_objs = super().get_media_requests(item, info)# 给每个request对象带上meta属性传入hero_name、pf_name参数,并返回for request_obj, num in zip(request_objs, range(0, len(item['pf_names']))):request_obj.meta['hero_name'] = item['hero_name']request_obj.meta['pf_name'] = item['pf_names'][num]return request_objs# 此方法是在图片将要被存储的时候调用,用来获取这个图片存储的全部路径def file_path(self, request, response=None, info=None):# 获取request的meta属性的hero_name作为文件夹名称hero_name = request.meta.get('hero_name')# 获取request的meta属性的pf_name并拼接作为文件名称image_name = request.meta.get('pf_name') + '.jpg'# 获取IMAGES_STORE图片的默认地址并拼接image_store = settings.IMAGES_STOREhero_name_path = os.path.join(image_store, hero_name)# 判断地址是否存在,不存则创建if not os.path.exists(hero_name_path):os.makedirs(hero_name_path)# 拼接文件夹地址与图片名图片存储的全部路径并返回image_path = os.path.join(hero_name_path, image_name)return image_path

settings.py

import osBOT_NAME = 'pvpqq'
SPIDER_MODULES = ['pvpqq.spiders']
NEWSPIDER_MODULE = 'pvpqq.spiders'ROBOTSTXT_OBEY = FalseDOWNLOADER_MIDDLEWARES = {'pvpqq.middlewares.RandomUserAgentMiddleware': 543,
}
# 自定义的图片处理管道
ITEM_PIPELINES = {'pvpqq.pipelines.PvpqqPipeline': 300,
}
# 设置所有图片默认地址,必须设置
# IMAGES_STORE = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'imgs')
IMAGES_STORE = 'C:\\Users\\lenovo\\Desktop\\爬虫\\spider_demo\\pvpqq\\imgs'
# 设置图片通道失效时间
IMAGES_EXPIRES = 90
# 设置允许重定向,否则可能找不到图片
MEDIA_ALLOW_REDIRECTS = True
# 切换User_Agent
MY_USER_AGENTS = ["Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 ""(KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1","Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 ""(KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 ""(KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 ""(KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 ""(KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 ""(KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5","Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 ""(KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 ""(KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 ""(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 ""(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
]

start.py

from scrapy import cmdline# 运行此文件代替命令行运行scrapy项目
cmdline.execute("scrapy crawl pf".split(" "))

四、效果截图

scrapy爬取王者荣耀皮肤相关推荐

  1. 简单几行代码带你爬取王者荣耀皮肤

    爬取王者荣耀皮肤 分析思路 源代码 爬取王者荣耀皮肤 分析思路 url:https://pvp.qq.com/web201605/js/herolist.json url还是很容易拼接的 源代码 im ...

  2. python爬取王者荣耀皮肤高清图

    python爬取王者荣耀皮肤高清图 前期准备,导入模块 requests json os 进入王者荣耀官网,进入游戏壁纸页面,f12进入开发者模式,按照下图找到这个json文件,用于对图片的数据请求. ...

  3. 如何运用python爬游戏皮肤_Python爬虫实战之 爬取王者荣耀皮肤

    王者荣耀是目前非常火的一款游戏,相信大家都对其中的人物很感兴趣,那么今天就带大家来爬取王者荣耀的皮肤,可以选一款喜欢的来当电脑壁纸.第一步,拿到url地址 第二步,获取各个人物皮肤数据 第三步,保存文 ...

  4. Python爬取王者荣耀皮肤

    引言 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了.我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可完成. 准备工 ...

  5. 利用python爬取王者荣耀皮肤壁纸

    作为python新手上路的小白,今天我来给大家安利一个爬取王者荣耀官方网站皮肤壁纸的项目,请大家多多关照! 一.登陆官网 首先我们登录王者荣耀官网,在菜单栏点击进入皮肤壁纸高清图可以看到以下画面: 通 ...

  6. 多线程爬取王者荣耀皮肤壁纸

    今天写了个小demo,多线程爬取王者荣耀全皮肤,话不多说,直入主题. https://pvp.qq.com/web201605/herolist.shtml这个是玩王者荣耀官网上的英雄列表,这个时候一 ...

  7. Python爬虫实战之 爬取王者荣耀皮肤

    王者荣耀是目前非常火的一款游戏,相信大家都对其中的人物很感兴趣,那么今天就带大家来爬取王者荣耀的皮肤,可以选一款喜欢的来当电脑壁纸

  8. 爬取王者荣耀皮肤-点券领取

    1.首先我们要找到所有英雄列表 百度"王者荣耀"进入官网,进入https://pvp.qq.com/,按F12进入调试界面,然后按F5刷新界面,图中标识的herolist.json ...

  9. 尝试用正则表达式爬取王者荣耀皮肤原图

    分析过程我就不展示了,直接看代码 import urllib.request as req import os import re import time import urllib.error as ...

最新文章

  1. 用!important解决IE和Mozilla的布局差别(转)
  2. 如何将Sql Server中的数据表导入到PowerDesigner中
  3. ant java build_Ant--基于java的build工具
  4. parseInt(08)或parseInt(09)转换返回0的解决办法
  5. linux c fifo阻塞写和非阻塞写,linux—FIFO的使用与非阻塞标志(O_NONBLOCK)的影响
  6. django界面上弹出bootstrap modal对话框,对话框中包含iframe并请求一个新的页面
  7. 判断是否为长按_如何判断电路中的IC是在工作?
  8. Android中BitmapFactory.Options详解
  9. Params属性的用法 (beginner)
  10. [转]Linux平台下的service程序编写指南
  11. 什么是scrum敏捷项目管理
  12. pscc2018更新内容
  13. cad角度命令怎么输入_CAD阵列命令中角度阵列的使用技巧
  14. 软件开发平台之争:NET VS Java,谁是更好的选择?
  15. Spring application context resource is not injected.
  16. jenkins邮件模板配置
  17. 集合的简单实现(斗地主牌的实现 )
  18. 互联网未来7大猜想 (欢迎指正)
  19. C语言数组讲解(1)一维数组的创建和初始化。
  20. 搜索系统—搜索引擎的原理,架构与细节

热门文章

  1. 申宝投资-指数上周五中阴杀跌
  2. 新库上线 | CnOpenData 新三板公司专利及引用被引用数据
  3. AI项目被谷歌撂挑子 美国防部愤而狂挖硅谷AI人才
  4. 全球及中国AR智能隐形眼镜市场发展形势分析及投资策略预测报告2022-2028年
  5. Adobe Acrobat DC 设置保存上次浏览位置
  6. C#高效编程:改进C#代码的50个行之有效的办法(第2版)(奋斗的小鸟)_PDF 电子书
  7. react 使用 useEffect 及踩坑
  8. 使用vue-cli创建项目
  9. OneNote for Windows 10 笔记的导出
  10. Bert Ertman专访:将Spring及遗留应用迁移到Java EE 6平台