栄光の英雄の皮膚の王をクロールのPythonの20行

入門

栄光の王はすべてプレイしたことがない、それを果たしたケケ、ほとんどの火災電話MOBAゲームの中と、聞かれるべきで、ポイントの横に思えます。我々の焦点は本日、すべての肌のクロールのための栄光の王はすべての英雄ですが、完了するために、Pythonコードの20行を使用しました。

準備

クロール皮膚自体は難しいものではありません、分析の難しさのうそは、我々は最初の皮膚画像のURLアドレスを取得する必要があり、あまり話をしなかった、私たちはすぐに王の公式ウェブサイトの栄光に来た:
ここに画像を挿入説明
私たちのヒーロークリックデータは、その後、その後、ランダムに英雄を選択してくださいオリジナルスキンフォトアドレスの英雄見つけ、デバッグの段階を開くためにF12:
ここに画像を挿入説明
次は、私たちがヒーロースキンを切り替えるを見て、あなたは絵アドレスは有意な変化は認められなかったでしょうが、最終的に図番号が変更された、私たちは一緒に肌を二つの絵に取り組みます比較:

http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/523/523-bigskin-1.jpg
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/523/523-bigskin-2.jpg

私たちは、同じ皮膚画像アドレスのヒーローを推測することができ、ちょうど異なる最後の桁のシリアル番号は、私たちの推測を確認するために、我々は全体の皮膚の英雄的な絵を見つけるために続けることができ、もう少し肌のための外観は、例えば、私はここで見つけますShangxiangは、その肌画像の全てが、それらを一緒に入れて対処することです。

http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-1.jpg
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-2.jpg
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-3.jpg
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-4.jpg
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-5.jpg
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-6.jpg
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-7.jpg

したがって、我々は1から始まる主人公の皮膚画像パス昇順で結論、私たちはさまざまな英雄を区別する方法を見て。:あなたは、私たちは二つの異なるヒーローがここにそれらを一緒に入れたアドレスをURLになるように、どんなに肌でどのように画像が変化し、ブラウザのアドレスのトップは、常に同じであることがわかります

https://pvp.qq.com/web201605/herodetail/523.shtml
https://pvp.qq.com/web201605/herodetail/111.shtml

一見すると、そこには、法律ではありませんが、我々は、最終的な数字は実際にヒーローが何であるかを制御する点を見つけ、ここから、我々はそれが数の英雄であることを忘れ、残念ながら、それは英雄の数との間に法律が存在しないと思われるようです、我々はその後、手がかり公式サイトを探して、心配しないでください。

在英雄资料界面,我们打开F12调试台,通过抓取网络请求,我发现了几个文件:
ここに画像を挿入説明
点击网络,然后点击XHR,就可以看到这几个文件,看到文件的名字大家应该就清楚了,这些文件存储的就是英雄列表信息,我们点击查看一下:
ここに画像を挿入説明
没错,这里存储的就是英雄信息,包括英雄的名字,英雄编号等等其它信息,我们可以试试这些信息的准确性,例如小乔的ename,也就是英雄编号为106,所以按照之前的想法,英雄小乔的详情地址应为:https://pvp.qq.com/web201605/herodetail/106.shtml
经过尝试后发现确实如此。

到这里,准备工作就完成了,其实进行到这里,整个工程就完成了一半了,接下来就是代码的实现了。

代码实现

首先我们创建一个Python文件,然后导入os和requests模块。
按照前面的步骤,我们首先需要获取到英雄列表信息,也就是herolist.json文件,文件地址为:https://pvp.qq.com/web201605/js/herolist.json,这在调试台中可以找到
那么我们首先就要通过这个地址获取到英雄列表信息的json数据,然后解析json数据,将有用的信息提取出来:

url = 'https://pvp.qq.com/web201605/js/herolist.json'
herolist = requests.get(url)  # 获取英雄列表json文件

herolist_json = herolist.json()  # 转化为json格式
hero_name = list(map(lambda x: x['cname'], herolist.json()))  # 提取英雄的名字
hero_number = list(map(lambda x: x['ename'], herolist.json()))  # 提取英雄的编号

私たちは英雄的な名前と番号を取得して、あなたは出力テストをすることができます:
ヒーローは数字を得た後、物事は非常にシンプルになり、ちょうどにURLアドレスをステッチクリック:
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + hero_number + '/' + hero_number + '-bigskin-1.jpgあなたは、皮膚の画像のすべての英雄に得ることができるので、しかし、写真の最大数は、我々は知らないので、ここで私は比較を使用し、いくつかの六十から七があるが、問題は、皮膚のヒーローは多かれ少なかれあり、ここで、いくつかの英雄は、皮膚のみの2つです愚かな方法は、10を超える皮膚の英雄があるので、彼らは私たちは、絵を扱っていますしていない場合、我々はすべての画像を得ることができるので、画像全体にアドレスの昇順に1-10から変数を作ることですA。達成するためのコードで次を見:

# 下载图片
def downloadPic():
    i = 0
    for j in hero_number:
        # 创建文件夹
        os.mkdir("C:\\Users\\Administrator\\Desktop\\wzry\\" + hero_name[i])
        # 进入创建好的文件夹
        os.chdir("C:\\Users\\Administrator\\Desktop\\wzry\\" + hero_name[i])
        i += 1
        for k in range(10):
            # 拼接url
            onehero_link = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(j) + '/' + str(
                j) + '-bigskin-' + str(k) + '.jpg'
            im = requests.get(onehero_link)  # 请求url
            if im.status_code == 200:
                open(str(k) + '.jpg', 'wb').write(im.content)  # 写入文件

非常に単純なを実現する、コードのコメントは、非常に明確にこの機能の到着を書かれている、我々は単にそれを呼び出す、絵は、プログラム全体の完全なコードをダウンロードすることができ、以下のとおりです。

import os
import requests

url = 'https://pvp.qq.com/web201605/js/herolist.json'
herolist = requests.get(url)  # 获取英雄列表json文件

herolist_json = herolist.json()  # 转化为json格式
hero_name = list(map(lambda x: x['cname'], herolist.json()))  # 提取英雄的名字
hero_number = list(map(lambda x: x['ename'], herolist.json()))  # 提取英雄的编号


# 下载图片
def downloadPic():
    i = 0
    for j in hero_number:
        # 创建文件夹
        os.mkdir("C:\\Users\\Administrator\\Desktop\\wzry\\" + hero_name[i])
        # 进入创建好的文件夹
        os.chdir("C:\\Users\\Administrator\\Desktop\\wzry\\" + hero_name[i])
        i += 1
        for k in range(10):
            # 拼接url
            onehero_link = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(j) + '/' + str(
                j) + '-bigskin-' + str(k) + '.jpg'
            im = requests.get(onehero_link)  # 请求url
            if im.status_code == 200:
                open(str(k) + '.jpg', 'wb').write(im.content)  # 写入文件


downloadPic()

私たちは肌の王クロール英雄の完全な栄光を持っていたコードの20行、非常に簡単ではありません近づいて、コメントを削除しますか?後に実行するために作成された私たちは、ここで私が書いたコードが死んでいるのですので、あなたが最初に、wzryと呼ばれるデスクトップ上にフォルダを作成する必要があり、このプログラムをテストすることができ、変更したい場合は、その後、我々はまた、変更することができ、フォルダをクリックしてくださいしばらく待って、ダウンロード上のすべての画像は完了です。
ここに画像を挿入説明
ここに画像を挿入説明
ここに画像を挿入説明
プログラムの構文解析JSON文字列の場合、我々はまた、より迅速に、次のように解決私たちが望む情報に取得することができ、このモジュールを使用するjsonpathモジュールを使用することができます。

hero_name = jsonpath.jsonpath(html_json, "$..cname")
hero_number = jsonpath.jsonpath(html_json, "$..ename")

この方法は、JSON文字列を受信して​​、ルールを解析し、$ ...どこでもCNAMEキーの値を検索すると、ルートディレクトリから、CNAMEや辞書に入れました。

エンディング

それは非常に直感的で視覚的なインパクトの強い感覚が、それはまた、非常に強力なものの、書き込み、爬虫類にやりがいがあるが、任意の個人情報をクロールしていないので、爬虫類は、非常に興味深いです。

テキストプログラムのためのより良い提案を持っている場合最後に、コメント欄にメッセージを歓迎しました。

おすすめ

転載: www.cnblogs.com/blizzawang/p/12113094.html