高度なクローラー、インターフェイスをつかむ方法を教えてください
今日クロールされるターゲットウェブサイトはミニマリストの壁紙です。最初に写真を入れてください。これはクロールしたいホームページです。
ウェブサイトでは右クリックが禁止されているため、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>
点击图片上的小红心试试 <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つはサムネイルリンクです。この方法でリンクを生成するだけです。一般的な考え方は、ブロガーがコードを停止したことです。役立つと思われる場合は、気に入ってください。サポートは私の最大の動機です!