登录  | 立即注册

游客您好!登录后享受更多精彩

查看: 880|回复: 0

[Python教程] 【Python】爬取英雄联盟素材

[复制链接]

444

主题

509

帖子

2051

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2051

荣誉管理论坛元老

发表于 2021-6-30 22:32:15 来自手机 | 显示全部楼层 |阅读模式 来自:
  1. # -*- coding: utf-8 -*-" Y- X4 k- c5 v1 j; M5 I
  2. # @Time    : 2020/1/28 21:12
    , f- [/ q3 M& o3 P$ G5 U
  3. # @Author  : SunriseCai
    / G! o# b$ U" g; Q7 o# e
  4. # @File    : YXLMSpider.py
    5 N! _+ C; D) H6 V' v) S/ P
  5. # @Software: PyCharm+ f; e  e3 S# `) y
  6. import os- o0 r* Y# A  a- q( F5 ^+ Z" _
  7. import json& z" A# h7 a. Y1 u
  8. import time$ _/ A5 U! {2 `/ @* D6 `
  9. import requests; A- m6 }+ X# @0 w& T  B

  10. & D1 G) e' y: i; e9 v
  11. """英雄联盟皮肤爬虫程序"""
    & t4 R5 }: a+ L, \
  12. 4 ^9 U* f9 o' n8 u1 k9 y, K

  13. * @2 X! O6 \' ^- C$ N3 L& d5 N
  14. class YingXLMSpider(object):
    $ r  ^8 n4 w! K; |. h) S2 k) l  [
  15.     def __init__(self):
    & C$ F4 B' [& D( T* a
  16.         self.onePageUrl = 'https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js'
    4 B5 K7 z: \, }# P! W. r
  17.         self.skinUrl = 'https://game.gtimg.cn/images/lol/act/img/js/hero/{}.js'! {# O% Q) B/ d$ S# F/ Y& U
  18.         self.headers = {
    6 k8 M; e, Q+ G# i+ {8 h  @
  19.             'User-Agent': 'Mozilla/5.0'  E8 k3 E& ^5 X! ^2 H. Q( E
  20.         }
    + P5 O" z( u( g; d% ?- g. j
  21. 5 ]1 L: k% M% ~! d, L
  22.     def get_heroList(self):
    % ]8 u  N. z( ]9 a
  23.         """
    ; d, d9 K" \8 |, e, z: H/ C3 C
  24.         :return: 获取英雄的heroId,和英雄名称6 f# c2 @; @0 P# _
  25.         """/ O( X5 ~  ]% r/ r' I+ y0 @5 o& r% W
  26.         res = requests.get(url=self.onePageUrl, headers=self.headers)1 Y( e  A. e# ^2 V" h8 H! T
  27.         if res.status_code == 200:: {) ~1 u2 k  P+ o  u6 D
  28.             data = json.loads(res.text)4 o1 k( L, T& }5 u" A/ w
  29.             for item in data['hero']:6 N5 r/ ?6 f, j) r0 ~6 m; q
  30.                 Id = item['heroId']; B3 _8 {( D$ |/ {
  31.                 title = item['title']& g9 H1 v* ^7 \2 G& m( g
  32.                 self.get_skin_url(Id, title)2 s9 A3 f& Q0 V( b: q" \- l
  33.         else:
    5 z' V4 y0 P" U
  34.             print('your code is fail')& H% t4 x: }5 U' b
  35. 6 d/ M: F: H9 c4 {
  36.     def get_skin_url(self, Id, folder):. v( Q2 e" p3 M5 m$ @
  37.         """
    ( ?: o% P- o3 t7 B
  38.         :param Id: 英雄ID,用于拼接url
    9 N6 q" k; L* G6 Z2 ]' q1 D. ^
  39.         :param folder: 以英雄名称命名的文件夹
    3 b1 Y: C8 u  `0 g& ~) _+ M
  40.         :return:
      K5 ~2 Y  {; @- D
  41.         """6 r: n' L! f" u" `  N) _8 B
  42.         url = self.skinUrl.format(Id)
    0 Q+ }" S( k  x9 q# k& |' L  i$ c* X
  43.         res = requests.get(url, headers=self.headers)
    0 W3 u5 s- H. j
  44.         if res.status_code == 200:
    $ ?* X8 ~& w, m' D
  45.             data = json.loads(res.text)
    / U( f* |# @1 a9 }$ N
  46.             for item in data['skins']:
    : e+ `5 w- [2 U. A
  47.                 url = item['mainImg']9 u$ m$ _& u% Q; g3 |
  48.                 name = item['name'].replace('/', '')) i# `7 r/ V) M: P- L
  49.                 self.download_picture(url, name, folder). e8 H& W; h' r7 K6 k. S

  50. 4 {& b) u2 E/ z2 ]1 t7 I  f" l5 n
  51.         else:! k( ]( q- c! m. T
  52.             print('your code is fail')' b; {2 o- |5 X. P+ o7 q
  53. + ]) z$ b! ^5 L
  54.     def download_picture(self, url, name, folder):
    ( d2 B( P- V9 c/ l7 ~/ U
  55.         """
    3 \7 F: e9 f1 T0 c9 C% \3 g4 ^) Q" T1 G
  56.         :param url:  皮肤地址
    6 @% b  R, S; _- ]
  57.         :param name: 皮肤名称
    " r# p5 w7 p% l+ ~6 V  g- ]# |: o4 b
  58.         :param folder: 文件夹
    9 ~% }: Z; B# Y2 V5 [
  59.         :return:
    1 p! D  A/ q1 Y' x9 M& T& Q
  60.         """: H: y$ k  ~8 f* ^7 Z5 y
  61.         # 判断如果文件夹不存在则创建
    ) o8 O; g/ p( `; y% L
  62.         if not os.path.exists(folder):1 T. i3 J: `8 t( l* u8 W% `: T3 p. M# v
  63.             os.makedirs(folder)5 K( Y8 j0 r; l1 ]: p/ F
  64.         # 判断url不为空和   图片不存在本地则下载(主要用于断点重连)" U# @& V$ o" Z
  65.         if not url == '' and not os.path.exists('%s/%s.jpg' % (folder, name)):
    0 `( q# F& R. R! k- R, }
  66.             time.sleep(1)% W9 _. ]$ N2 x' g( t! k
  67.             res = requests.get(url, headers=self.headers)3 y' d* e5 h; |7 |
  68.             with open('%s/%s.jpg' % (folder, name), 'wb') as f:
    7 Q  p+ _! q$ y# W
  69.                 f.write(res.content)5 N9 v3 Y/ A  l$ y$ h
  70.                 print('%s.jpg' % name, '下载成功')
    6 I9 o8 X8 R6 c; y( n2 c
  71.                 f.close()
    7 b2 k0 @; B% L, \+ o

  72. 7 I7 ^3 @& P* K
  73.     def main(self):2 R( \, U$ W7 X0 L1 e
  74.         self.get_heroList()7 W9 ^+ M- [4 v7 R

  75. 1 z! I) K) q7 _& g6 T! \; P
  76. - a1 ?) |7 S- P5 F
  77. if __name__ == '__main__':
    % l" c$ |/ I4 t. D" F( E
  78.     spider = YingXLMSpider()
    - _0 {- F- f9 [4 @: b% Y
  79.     spider.main()- d2 R* P# D, m0 Q9 x
  80. ' h: _/ W7 u5 e$ K$ U
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|星空社区 |网站地图

GMT+8, 2024-4-28 00:33 , Processed in 0.054308 second(s), 32 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表