1.クロールする必要のあるWebサイトを分析します
#! /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