Pythonはスキンのフルセットをクロールします

著者:toofelix
出典:http://suo.im/6pj3Zp


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('---ダウンロード完了...')

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

< END >

Recommended Posts

Pythonはスキンのフルセットをクロールします
Pythonは、王の栄光のためにスキンのフルセットをクロールします
Pythonの基盤を統合する(4)
Python(7)の基盤を統合する
Python(6)の基盤を統合する
栄光のパイソンキング壁紙
Python(5)の基盤を統合する
Pythonの基盤を統合する(3)
pythonでのwheelの使用法
地主取引のPythonシミュレーション
Pythonの用途は何ですか
Pythonモジュールの知識の完全な分析
Python文字列プーリングの前提
Python3.8の新機能の秘密
Pythonの父がMicrosoftに加わる
python accesshdfsの操作
pythonでのタプルの使用法
pythonを実行するメソッドを終了します
pythonでのrbの意味を理解する
pythonインタラクティブモードの基本を学ぶ
pythonの必須パラメーターは何ですか
pythonの下部にあるロジスティック回帰
Python3クローラーでのAjaxの使用
PythonはTowerofHanoiゲームを解決します
pythonの複数のバージョンの競合を解決します
python変数の範囲は何ですか
Pythonは分数シーケンスの合計を実装します
Pythonの基礎を学ぶ2日間
pythonのid関数は何ですか
python3のピップパスはどこにありますか
Python言語の本質:Itertoolsライブラリ
python言語の利点は何ですか
pythonインスタンス化オブジェクトの特定のメソッド
python3はマスク描画の機能を実現します
python開発の見通しは何ですか
pythonの関数本体は何ですか
pythonインポートライブラリの特定の方法
pythonの複数のバージョンの競合を解決します
pythonでのadbの機能は何ですか
Python super()メソッドの原理の詳細な説明
javaとpythonの構文の違い
Pythonは学生管理システムの開発を実現します
PythonはDoudizhuでカードのシャッフルを実装します
pythonでのリストの意味と使用法
起動エラーを実行しているpythonの問題を解決します
python辞書の値を変更できますか?
Pythonはスネークゲームのソースコードを実装しています
Pythondecimalモジュールの使用法の詳細な説明
27歳でパイソンを学ぶのはどうですか?
ubuntuでpythonをアンインストールした結果、非常に
Pythonは釣りマスターのゲーム実装を書きます