前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >利用Scrapy框架爬取LOL皮肤站高清壁纸

利用Scrapy框架爬取LOL皮肤站高清壁纸

作者头像
SingYi
发布于 2022-07-14 07:54:19
发布于 2022-07-14 07:54:19
47300
代码可运行
举报
文章被收录于专栏:Lan小站Lan小站
运行总次数:0
代码可运行

成品打包:点击进入

代码:

爬虫文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-
import scrapy
from practice.items import PracticeItem
from urllib import parse


class LolskinSpider(scrapy.Spider):
    name = 'lolskin'
    allowed_domains = ['lolskin.cn']
    start_urls = ['https://lolskin.cn/champions.html']

    # 获取所有英雄链接
    def parse(self, response):
        item = PracticeItem()
        item['urls'] = response.xpath('//div[2]/div[1]/div/ul/li/a/@href').extract()
        for url in item['urls']:
            self.csurl = 'https://lolskin.cn'
            yield scrapy.Request(url=parse.urljoin(self.csurl, url), dont_filter=True, callback=self.bizhi)
        return item

    # 获取所有英雄皮肤链接
    def bizhi(self, response):
        skins = (response.xpath('//td/a/@href').extract())
        for skin in skins:
            yield scrapy.Request(url=parse.urljoin(self.csurl, skin), dont_filter=True, callback=self.get_bzurl)

    # 采集每个皮肤的壁纸,获取壁纸链接
    def get_bzurl(self, response):
        item = PracticeItem()
        image_urls = response.xpath('//body/div[1]/div/a/@href').extract()
        image_name = response.xpath('//h1/text()').extract()
        yield {
            'image_urls': image_urls,
            'image_name': image_name
        }
        return item

items.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy


class PracticeItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    # titles = scrapy.Field()
    # yxpngs = scrapy.Field()
    urls = scrapy.Field()
    skin_name = scrapy.Field()  # 皮肤名
    image_urls = scrapy.Field()  # 皮肤壁纸url
    images = scrapy.Field()

pipelines.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html
import os
import re
from scrapy.pipelines.images import ImagesPipeline
import scrapy


# class PracticePipeline(object):
#     def __init__(self):
#         self.file = open('text.csv', 'a+')
#
#     def process_item(self, item, spider):
#         # os.chdir('lolskin')
#         # for title in item['titles']:
#         #     os.makedirs(title)
#         skin_name = item['skin_name']
#         skin_jpg = item['skin_jpg']
#         for i in range(len(skin_name)):
#             self.file.write(f'{skin_name[i]},{skin_jpg}
')
#         self.file.flush()
#         return item
#
#     def down_bizhi(self, item, spider):
#         self.file.close()


class LoLPipeline(ImagesPipeline):
    def get_media_requests(self, item, info):
        for image_url in item['image_urls']:
            yield scrapy.Request(image_url, meta={'image_name': item['image_name']})

    # 修改下载之后的路径以及文件名
    def file_path(self, request, response=None, info=None):
        image_name = re.findall('/skin/(.*?)/', request.url)[0] + "/" + request.meta[f'image_name'][0] + '.jpg'
        return image_name

settings.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-

# Scrapy settings for practice project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
#     https://docs.scrapy.org/en/latest/topics/settings.html
#     https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
#     https://docs.scrapy.org/en/latest/topics/spider-middleware.html
import os

BOT_NAME = 'practice'

SPIDER_MODULES = ['practice.spiders']
NEWSPIDER_MODULE = 'practice.spiders'

# Crawl responsibly by identifying yourself (and your website) on the user-agent
# USER_AGENT = 'practice (+http://www.yourdomain.com)'

# Obey robots.txt rules
ROBOTSTXT_OBEY = False

# Configure maximum concurrent requests performed by Scrapy (default: 16)
# CONCURRENT_REQUESTS = 32

# Configure a delay for requests for the same website (default: 0)
# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
# 设置延时
DOWNLOAD_DELAY = 1
# The download delay setting will honor only one of:
# CONCURRENT_REQUESTS_PER_DOMAIN = 16
# CONCURRENT_REQUESTS_PER_IP = 16

# Disable cookies (enabled by default)
# COOKIES_ENABLED = False

# Disable Telnet Console (enabled by default)
# TELNETCONSOLE_ENABLED = False

# Override the default request headers:
# DEFAULT_REQUEST_HEADERS = {
#   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
#   'Accept-Language': 'en',
# }

# Enable or disable spider middlewares
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
# SPIDER_MIDDLEWARES = {
#    'practice.middlewares.PracticeSpiderMiddleware': 543,
# }

# Enable or disable downloader middlewares
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
# DOWNLOADER_MIDDLEWARES = {
#    'practice.middlewares.PracticeDownloaderMiddleware': 543,
# }

# Enable or disable extensions
# See https://docs.scrapy.org/en/latest/topics/extensions.html
# EXTENSIONS = {
#    'scrapy.extensions.telnet.TelnetConsole': None,
# }

# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
    # 'practice.pipelines.PracticePipeline': 300,
    # 'scrapy.pipelines.images.ImagesPipeline': 1'practice.pipelines.LoLPipeline': 1
}
# 设置采集文件夹路径
IMAGES_STORE = 'E:PythonscrapypracticepracticeLOLskin'
# Enable and configure the AutoThrottle extension (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/autothrottle.html
# AUTOTHROTTLE_ENABLED = True
# The initial download delay
# AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
# AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
# AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
# AUTOTHROTTLE_DEBUG = False

# Enable and configure HTTP caching (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
# HTTPCACHE_ENABLED = True
# HTTPCACHE_EXPIRATION_SECS = 0
# HTTPCACHE_DIR = 'httpcache'
# HTTPCACHE_IGNORE_HTTP_CODES = []
# HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

main.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from scrapy.cmdline import execute

execute(['scrapy', 'crawl', 'lolskin'])
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Dune Analytics入门教程(含示例)
Dune Analytics 是进行区块链研究的强大工具。它可用于查询,提取和可视化以太坊区块链上的大量数据。这篇文章介绍了一些基本示例,这些示例说明了如何搜索和编写基本查询以及如何使用图表将其可视化。探索的机会是无限的。
Tiny熊
2020/11/30
5.3K0
Dune Analytics入门教程(含示例)
NFT新手教程: 如何编写和部署NFT(第1部分)
随着 NFT 将区块链带入公众视野,现在是一个极好的机会,通过在以太坊区块链上发布自己的 NFT(ERC-721 代币)来宣传自己。
Tiny熊
2022/05/25
4.2K0
NFT新手教程: 如何编写和部署NFT(第1部分)
在Polygon网络上构建应用的全栈开发指南
用 Next.js、Tailwind、Solidity[4]、Hardhat[5]、Ethers.js[6]、IPFS 和 Polygon 建立一个 NFT 数字市场
Tiny熊
2021/09/23
2.5K0
在Polygon网络上构建应用的全栈开发指南
Dune Analytics 简介
在幕后,Dune 将难以访问的数据转换为人类可读的表格。这些表使得编写从区块链中检索信息的 SQL 查询成为可能。Dune 还允许您访问其他用户的公开查询,以便您可以从他们停下来的地方继续。
公众号---人生代码
2021/08/26
1.7K0
Dune Analytics 简介
每周以太坊进展2022/4/16
(编者注:本翻译不代表登链社区的立场,也不代表我们(有能力并且已经)核实所有的事实并把他的观点分离开来。)
Tiny熊
2022/05/25
4520
每周以太坊进展2022/7/16
(编者注:本翻译不代表登链社区的立场,也不代表我们(有能力并且已经)核实所有的事实并把他的观点分离开来。)
Tiny熊
2022/11/07
5420
【以太坊通证标准】ERC20系列,ERC721系列,ERC865
【本文目标】 通过本文学习,了解ERC定义及知名ERC协议标准,如ERC20以及ERC223、ERC621,ERC827协议,ERC721以及 ERC875,ERC1155,ERC998协议,ERC 865等描述和定义。
辉哥
2018/08/10
1.8K0
【以太坊通证标准】ERC20系列,ERC721系列,ERC865
每周以太坊进展2022/4/30
(编者注:本翻译不代表登链社区的立场,也不代表我们(有能力并且已经)核实所有的事实并把他的观点分离开来。)
Tiny熊
2022/05/25
5570
ChainBridge跨链协议快速教程【EVM/Substrate】
ChainBridge是一个可扩展的跨链通信协议,目前兼容EMV和Substrate链,支持两个不同的EVM区块链、或者一个EVM链与一个Substrate链之间的跨链桥接与通证转移,支持ERC20、ERC721等多种类型的通证的跨链转移,以及普通数据的跨链转移。在这个教程中,我们将介绍ChainBridge的基本构成和安装方法,并利用ChainBridge实现Substrate原生资产和以太坊ERC20/ERC721通证之间的跨链转移。
用户5687508
2021/05/30
1.7K0
如何使用 Dapptools | 类似 MakerDAO 使用的代码
了解如何使用Dapptools[4],这是一个智能合约部署框架,适用于喜欢 bash 和命令行的 web3 开发人员。我们着眼于使用它端到端的学习区块链部署框架。
Tiny熊
2022/11/07
9220
如何使用 Dapptools | 类似 MakerDAO 使用的代码
每周以太坊进展 2022/8/20
(编者注:本翻译不代表登链社区的立场,也不代表我们(有能力并且已经)核实所有的事实并把他的观点分离开来。)
Tiny熊
2022/11/07
6700
每周以太坊进展 2021/12/31
原文链接:https://weekinethereumnews.com/week-in-ethereum-news-december-31-2021/ 作者:Evan Van Ness 翻译:翻译小组[37]
Tiny熊
2022/01/05
6550
【源码解读】你买的NFT到底是什么?
本文围绕标准 ERC721协议,描述了Mint、 safeMint、 transfer等是如何实现资产管理的,并通过解读代码来了解它的安全性设计和以太坊数据上链成本构成。
十四君
2023/02/18
8500
【源码解读】你买的NFT到底是什么?
每周以太坊进展2022/4/9
(编者注:本翻译不代表登链社区的立场,也不代表我们(有能力并且已经)核实所有的事实并把他的观点分离开来。)
Tiny熊
2022/05/25
3870
一文带你了解NFT的底层技术有哪些
不知道从什么时候起,NFT突然火了。你会时不时的看到一个新闻说某个数字藏品的NFT买了几十万美金,似乎NFT是财富密码一样。
用户7634691
2022/05/31
7830
一文带你了解NFT的底层技术有哪些
Art Blocks合约要点分析 - 利用 JavaScript 动态生成图片
Art Blocks 是一个创建链上生成 NFT 的平台。但是你知道在链上和链下究竟保留了什么吗?为什么他们的智能合约中需要 JavaScript?
Tiny熊
2022/11/07
6580
Art Blocks合约要点分析 - 利用 JavaScript 动态生成图片
每周以太坊进展2022/6/18
(编者注:本翻译不代表登链社区的立场,也不代表我们(有能力并且已经)核实所有的事实并把他的观点分离开来。)
Tiny熊
2022/11/07
3200
如何编写 NFT 智能合约
在之前的教程中,我们向你展示了如何使用我们的生成艺术库[4]来创建一个头像集合[5],生成符合要求的 NFT 元数据,并将元数据 JSON 和媒体文件上传至 IPFS[6]。
Tiny熊
2022/11/07
1.2K0
如何编写 NFT 智能合约
【解读】以太坊上海升级即将激活的四个EIP
以太坊巴黎升级(合并,共识转POS)之后又一重大更新即将到来——上海升级!目前有着上千专业开发者的以太坊核心社区,从15年走来已经历经15次主网升级,而这一次上海升级将为链上锁定着的230亿美金的POS质押ETH提供解锁能力,还伴随有对GAS优化的诸多EIP融入。
十四君
2023/02/20
1K0
【解读】以太坊上海升级即将激活的四个EIP
每周以太坊进展2022/4/2
(编者注:本翻译不代表登链社区的立场,也不代表我们(有能力并且已经)核实所有的事实并把他的观点分离开来。)
Tiny熊
2022/04/11
6200
相关推荐
Dune Analytics入门教程(含示例)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档