Pythonは、王の栄光のためにスキンのフルセットをクロールします

1.クロールする必要のあるWebサイトを分析します

①、栄光の公式壁紙サイトを開く###

②ショートカットキーF12、コンソールを呼び出してパケットキャプチャ###

③、正しいリンクを見つけて分析する###

④。返されたデータ形式を表示する###

⑤、URLリンクを解決する###

⑥URLの内容が目的の画像かどうかを確認し、実際にはサムネイルであることがわかります###

∥次に、ウェブサイトを分析し、壁紙をクリックするだけで、指定された形式でリンクを表示します###

⑧、目的の住所を探す###

⑨、ターゲットリンクとサムネイルの違いを分析する###

2、クローラーコード#

①この時点でクローラー分析は完了しており、完全なクローラーコードは次のとおりです###

#! /usr/bin/env python
# encoding: utf-8'''
#-------------------------------------------------------------------
#     CONFIDENTIAL --- CUSTOM STUDIOS
#-------------------------------------------------------------------
#
#     @ Project Name :キングオブグローリー壁紙ダウンロード
#
#     @ File Name    : main.py
#
#     @ Programmer   : Felix
#
#     @ Start Date   :2020/7/3014:42
#
#     @ Last Update  :2020/7/3014:42
#
#-------------------------------------------------------------------'''
import os, time, requests, json, re
from retrying import retry
from urllib import parse
 
classHonorOfKings:'''
  This is a main Class, the file contains all documents.
  One document contains paragraphs that have several sentences
  It loads the original file and converts the original file to newcontent
  Then the newcontent will be saved by thisclass'''
 def __init__(self, save_path='./heros'):
  self.save_path = save_path
  self.time =str(time.time()).split('.')
  self.url ='https://apps.game.qq.com/cgi-bin/ams/module/ishow/V1.0/query/workList_inc.cgi?activityId=2735&sVerifyCode=ABCD&sDataType=JSON&iListNum=20&totalpage=0&page={}&iOrder=0&iSortNumClose=1&iAMSActivityId=51991&_everyRead=true&iTypeId=2&iFlowId=267733&iActId=2735&iModuleId=2735&_=%s'% self.time[0]
 
 def hello(self):'''
  This is a welcome speech
  : return: self
        '''
  print("*"*50)print(' '*18+'キングオブグローリー壁紙ダウンロード')print(' '*5+'著者: Felix  Date: 2020-05-20 13:14')print("*"*50)return self
 
 def run(self):'''
  The program entry
        '''
  print('↓'*20+'フォーマットの選択: '+'↓'*20)print('1.サムネイル2.1024x768 3.1280x720 4.1280x1024 5.1440x900 6.1920x1080 7.1920x1200 8.1920x1440')
  size =input('ダウンロードする形式のシリアル番号を入力してください。デフォルトは6です。')
  size = size if size and int(size)in[1,2,3,4,5,6,7,8]else6print('---ダウンロード開始...')
  page =0
  offset =0
  total_response = self.request(self.url.format(page)).text
  total_res = json.loads(total_response)
  total_page =--int(total_res['iTotalPages'])print('---合計で{}ページ...'.format(total_page))while True:if offset > total_page:break
   url = self.url.format(offset)
   response = self.request(url).text
   result = json.loads(response)
   now =0for item in result["List"]:
    now +=1
    hero_name = parse.unquote(item['sProdName']).split('-')[0]
    hero_name = re.sub(r'[【】:.<>|·@#$%^&() ]','', hero_name)print('---ダウンロード{}ページ{}ヒーローの進歩{}/{}...'.format(offset, hero_name, now,len(result["List"])))
    hero_url = parse.unquote(item['sProdImgNo_{}'.format(str(size))])
    save_path = self.save_path +'/'+ hero_name
    save_name = save_path +'/'+ hero_url.split('/')[-2]if not os.path.exists(save_path):
     os.makedirs(save_path)if not os.path.exists(save_name):withopen(save_name,'wb')as f:
      response_content = self.request(hero_url.replace("/200","/0")).content
      f.write(response_content)
   offset +=1print('---ダウンロード完了...')
 
 @ retry(stop_max_attempt_number=3)
 def request(self, url):'''
  Send a request
  : param url: the url of request
  : param timeout: the time of request
  : return: the result of request
        '''
  response = requests.get(url, timeout=10)
  assert response.status_code ==200return response
 
if __name__ =="__main__":HonorOfKings().hello().run()

②、詳細分析リンク###

self.url ='https://apps.game.qq.com/cgi-bin/ams/module/ishow/V1.0/query/workList_inc.cgi?activityId=2735&sVerifyCode=ABCD&sDataType=JSON&iListNum=20&totalpage=0&page={}&iOrder=0&iSortNumClose=1&iAMSActivityId=51991&_everyRead=true&iTypeId=2&iFlowId=267733&iActId=2735&iModuleId=2735&_=%s'% self.time[0]

③、フォーマット選択###

print('↓'*20+'フォーマットの選択: '+'↓'*20)print('1.サムネイル2.1024x768 3.1280x720 4.1280x1024 5.1440x900 6.1920x1080 7.1920x1200 8.1920x1440')
size =input('ダウンロードする形式のシリアル番号を入力してください。デフォルトは6です。')
size = size if size and int(size)in[1,2,3,4,5,6,7,8]else6

④、コード分析をダウンロード###

print('---ダウンロード開始...')
page =0
offset =0
total_response = self.request(self.url.format(page)).text
total_res = json.loads(total_response)
total_page =--int(total_res['iTotalPages'])print('---合計で{}ページ...'.format(total_page))while True:if offset > total_page:break
 url = self.url.format(offset)
 response = self.request(url).text
 result = json.loads(response)
 now =0for item in result["List"]:
  now +=1
  hero_name = parse.unquote(item['sProdName']).split('-')[0]
  hero_name = re.sub(r'[【】:.<>|·@#$%^&() ]','', hero_name)print('---ダウンロード{}ページ{}ヒーローの進歩{}/{}...'.format(offset, hero_name, now,len(result["List"])))
  hero_url = parse.unquote(item['sProdImgNo_{}'.format(str(size))])
  save_path = self.save_path +'/'+ hero_name
  save_name = save_path +'/'+ hero_url.split('/')[-2]if not os.path.exists(save_path):
   os.makedirs(save_path)if not os.path.exists(save_name):withopen(save_name,'wb')as f:
    response_content = self.request(hero_url.replace("/200","/0")).content
    f.write(response_content)
 offset +=1print('---ダウンロード完了...')

⑤、クローラー実行の結果、同じフォルダーに同じ名前を入れます###

Recommended Posts

Pythonは、王の栄光のためにスキンのフルセットをクロールします
Pythonはスキンのフルセットをクロールします
栄光のパイソンキング壁紙
Pythonを学ぶためのいくつかのウェブサイトの推奨事項
Python2とPython3の違いの簡単な要約
pythonはどのように辞書のキーを呼び出しますか
python学習初日の概要
pythonで円の領域を見つける方法
Pythonの基盤を統合する(4)
Python(7)の基盤を統合する
Python(6)の基盤を統合する
Python(5)の基盤を統合する
Pythonの基盤を統合する(3)
Pythonは中国語の4つの車輪を処理します
地主取引のPythonシミュレーション
Pythonの用途は何ですか
200のPython標準ライブラリの要約!
Pythonモジュールの知識の完全な分析
Python文字列プーリングの前提
Python3.8の新機能の秘密
Pythonの父がMicrosoftに加わる
python accesshdfsの操作
pythonでのタプルの使用法
pythonを実行するメソッドを終了します