高度なクローラー、インターフェイスをつかむ方法を教えてください

高度なクローラー、インターフェイスをつかむ方法を教えてください

今日クロールされるターゲットウェブサイトはミニマリストの壁紙です。最初に写真を入れてください。これはクロールしたいホームページです。

ここに写真の説明を挿入

ウェブサイトでは右クリックが禁止されているため、F12、

ここに写真の説明を挿入

Elemetsを選択し、ランダムに画像を見つけてみてください。

ここに写真の説明を挿入

ご覧のとおり、これはサムネイルであり、クロールしたいのは高解像度の元の画像です。

ここに写真の説明を挿入

ネットワークに移動して、返されたhtmlに必要な画像データが含まれていないことを確認してください

<div class="view-body" :class="{
     
     'view-body-classify':config.page.active == 'classify'}">
                <div :id="'box_'+j.i" v-for="(j,index) in json.view" class="img-box">
                    <img :id="j.i" v-lazy="getUrl(j.i,j.t)" data-type="img-box" :data-index="index" v-if="j.t != 'ad'" :key="getUrl(j.i,j.t)" width="100%" alt="" @click="showFull(index)">
                    <img :id="j.i" src="img/ad.png" v-if="j.t == 'ad'" style="width:100%;z-index:-1000" alt="" transform="translate(-50%, -50%)" onload='loadAdsense("box",this)'>
                </div>
                <div v-if="config.page.active == 'like' && json.likes.length == 0" class="nolikemsg center">
                    <span>
                        您还没有收藏喜欢的图片<br>
                        点击图片上的小红心试试&nbsp;<span class="heart iconfont iconheart"></span>
                    </span>
                </div>
            </div>

明らかに、データは最初にjsを介してアップロードされるので、次のステップはインターフェイスを把握することです。どのように把握するのですか?

ネットワークを開き、ページを更新し、XHR(filter ajax request)を選択すると、getJsonリクエストが表示され、クリックして確認します。これは必要なデータではありませんか?

ここに写真の説明を挿入

データを使用すると、簡単です。getJsonインターフェイスにリクエストを送信する限り、データを取得できますか?重要なのは、リクエストを送信し、リクエストのキーパラメータをシミュレートする方法です。最初のステップでは、リクエストの内容を確認する必要があります。パラメータ、

accept: */*
accept-encoding: gzip, deflate, br
accept-language: zh-CN,zh;q=0.9,en;q=0.8
access: e7809d01583f1f91da7ad087fd736c97e5df2780557bc50f54a4e80ba438cf9c
cache-control: no-cache
content-length: 30
content-type: application/json
location: bz.zzzmh.cn
origin: https://bz.zzzmh.cn
pragma: no-cache
referer: https://bz.zzzmh.cn/
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: same-site
sign: ea04368c4c168320af527f08a6501345
timestamp: 1603903026787
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36

ステップバイステップのテストでは、署名パラメータはブラウザが変更されたときにのみ変更され、アクセスとタイムスタンプは毎回変更されることがわかりました。明らかにタイムスタンプはタイムスタンプを表すため、キーパラメータはアクセスに関連しています。アクセスは暗号化する必要があると推測できます。渡された文字列はmd5のように感じますが、これをどのように解決できますか?

とにかく、最初にアクセスパラメータをコピーして、グローバルに検索します。ない場合は、どうすればよいですか。

ここに写真の説明を挿入

フロントエンドがないため、jsで生成する必要があります。次のアイデアは、jsコードを見つけることです。どのように開始しますか?

返されたフロントエンドコードを観察すると、参照されているjsのほとんどがcdnであり、明らかにコアロジックがないことがわかりました。

ここに写真の説明を挿入

入って見て

ここに写真の説明を挿入

これはjsコードです。26行目のコードの束は明らかにjs構文に準拠していません。混乱する必要があると思いますが、なぜ混乱する必要があるのでしょうか。答えは明白で(私の心に吸い込まれます)、方向は正しいようです。

混乱しているので、解決する必要があります。オンラインのjs難読化解除Webサイトがたくさんあるので、デモンストレーションはしません。Baiduに行きます。

難読化解除後にjsコードを取得し、キーパラメータアクセスを検索すると、突然気づきます。

ここに写真の説明を挿入

案の定、md5暗号化は正しいです。暗号化方式を模倣してパラメーターアクセスを生成する限り、バックエンドからデータを要求できますか?

ここに写真の説明を挿入

少し投げた後、データを取得しましたが、データをどのように使用する必要がありますか?

ここに写真の説明を挿入

フロントエンドの画像リンクはすべて関数getUrlによって生成されていることがわかります。その後、jsで検索できます。

ここに写真の説明を挿入

案の定、1つは元の画像で、もう1つはサムネイルリンクです。この方法でリンクを生成するだけです。一般的な考え方は、ブロガーがコードを停止したことです。役立つと思われる場合は、気に入ってください。サポートは私の最大の動機です!

おすすめ

転載: blog.csdn.net/m0_48769739/article/details/109349646