2016-05-17 9 views
0

私はウェブサイトdl-protectを解析し、このタイプのURLを与えようとしています:http://www.dl-protect.com/F469D615出力は直接例えばuptoboxリンクです。NodeJsを使用してウェブサイトを解析する

私はこのサービスがchrome dev consoleを使ってどのように動作するかを調べようとしました。

まず第一に、思いやりの2例があります:

  • で、CAPTCHAを入力する必要はありませんが、あなただけの継続ボタンをクリックする必要があります。 NodeJsプログラムは、2番目のページにあるURL(ここではuptobox)を返します。

  • キャプチャを入力する必要があります。

    import request from 'request'; 
    import cheerio from 'cheerio'; 
    
    // try to respect the header has if it were coming from a browser 
    let options = { 
        url: 'http://www.dl-protect.com/F469D615', 
        headers: { 
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 
        'Accept-Language': 'fr,en-US;q=0.8,en;q=0.6,fr-FR;q=0.4', 
        'Cache-Control': 'max-age=0', 
        'Connection': 'keep-alive', 
        'Content-Type': 'application/x-www-form-urlencoded', 
        'Host': 'www.dl-protect.com', 
        'Origin': 'http://www.dl-protect.com', 
        'Referer': 'http://www.dl-protect.com/F469D615', 
        'Upgrade-Insecure-Requests': '1', 
        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/49.0.2623.108 Chrome/49.0.2623.108 Safari/537.36' 
        } 
    }; 
    
    request.get(options, function (error, response, body) { 
        if (!error && response.statusCode == 200) { 
         // parse the body response with cheerio 
         let $ = cheerio.load(body); 
    
         // detect if a captcha is required 
         let isCaptcha = !!$('#captcha').length; 
    
         // url of the captcha if needed 
         let captchaUrl = ''; 
    
         // display wether we need captcha or not 
         switch (isCaptcha) { 
          case true: 
           captchaUrl = $('#captcha').attr('src'); 
           console.log(`Captcha required, URL : ${captchaUrl}`); 
           break; 
          case false: 
           console.log('No captcha required'); 
           break; 
         } 
    
         // get the key 
         let formKey = $('form[name="ccerure"] input[name="key"]').attr('value'); 
         console.log(`key : ${formKey}`); 
    
         // set the form as it's computed no need to get it 
         // this param is just data about the browser so I ended up copying it once it was generated 
         let formIn = [ 
          '_UETCF0UJREfkVmbpZWZk5Wd7QXYtJ3bGBCduVWb1N2bEBSZsJWY0J3bQtj', 
          'cldXZpZXLmRGctwWYuJXZ05Wa7IXZ3VWaWBiREBFItVXat9mcoNkJkVmbpZ', 
          'WZk5Wd74CduVGdu92Yg8WZklmdv8WakVXYgwUTUhEIm9GIrNWYilXYsBHIy', 
          '9mZgMXZz5WZjlGbgUmbpZXZkl2VgMXZsJWYuV0OvNnLyVGdwFGZh1GZjVmb', 
          'pZXZkl2dilGb7UGb1R2bNBibvlGdwlncjVGRgQnblRnbvNEIl5Wa2VGZpdl', 
          'JkVmbpZWZk5Wd7sTahpGall2ZmV2bo9mZvp2blFGciJmamN2Zk1mYmpGatt', 
          'jcldXZpZFIGREUg0Wdp12byh2Q8ZzMuczM18SayFmZhNFI4ATMuMjM2IjLw', 
          '4SO08SZt9mcoNEI4ATMuMjM2IjLw4SO08Sb1lWbvJHaDBSd05WdiVFIp82a', 
          'jV2RgU2apxGIswUTUh0SoAiNz4yNzUzL0l2SiV2VlxGcwFEIpQjNfZDO4BC', 
          'e15WaMByOxEDWoACMuUzLhxGbpp3bNxHNygHN0YDewMTN==' 
         ].join(''); 
    
         // if no captcha 
         if (!isCaptcha) { 
          // override the initial options by adding the necessary form data 
          options = Object.assign({}, options, {form: {key: formKey, i: formIn, submitform: 'Continuer'}}); 
    
          // reach the same page with a post containing the following data : key, i and submitform 
          request.post(options, function (error, response, body) { 
           console.log(body); 
           // console.log(response); 
           // console.log(error); 
          }); 
         } 
        } 
    }); 
    

    私はクロームのdevのパネルを見て(ネットワーク]タブ:この場合NodeJsプログラムは、キャプチャのURLを

はこれまでのところ、ここ(ES6で書かれた)私のコードです返す必要があります+)のログを保存し、できるだけ早く私は続けるボタンをクリックすると、それは私にこの例を示します

chrome dev panel

を私は本当に「I」と「submitform」は十分だろう、「キー」を渡すと思いましたしかし、そうではありません。 URLを使って2番目のページに行くのではなく、最初のページに戻るだけです。

uptoboxのリンク(この場合)を出力として取得する方法についての手掛かりは本当に素晴らしいでしょう。

ありがとうございます!

+0

実際の質問は何ですか? –

+0

質問は、あなたが私が望むページに到達できない理由を知っていますか?たぶん私は明確ではなかった、言い換えれば私に説明させてください:) 2ページあります。最初のリンクが表示されているリンクを開き(続行ボタン付き)、リンクをクリックすると保護されたリンクを持つ2ページ目を表示します。私のコードでは、私はそれをシミュレートしようとします。だから基本的に私はなぜ私が出力としてuptoboxリンクを得ることができないのか理解したいと思いますか? – Maxime

+0

[浸透](https://github.com/rchipka/node-osmosis)や[PhantomJs](http://phantomjs.org/)のようなヘッドレスブラウザフレームワークのようなスクレイピングライブラリを見てください。 –

答えて

2

ほとんどのウェブサイトは、自分のサイトを掻き集める人々から自分自身を守るために努力します - その理由は慎重であり、理由は独自のものです - しかし、通常はサイトを保護するという意味は、 はタイムスタンプであり、有効期限が切れており、おそらくの単一使用がバックエンドに存在することも検証されています。

このサイトの具体的な内容は、誰でも推測できるものと、社内のセキュリティエンジニアリングの一部です。

あなたは、あなたがやろうとしているような簡単なクロールには不運かもしれませんし、フルブラウザーが必要です。幸いにも(あなたにとって)PhantomJsのようなヘッドレスブラウザがあります助けの

+0

これは私の最初のアプローチでしたが、より複雑で低速でした。さらに、ノードとの統合はもう少し難しいです...私は方法を見つけることができると思ったが、残念ながら私はしなかった。私はここに欠けているものがあると確信しています。何か明白。私は近くにいると感じる(おそらく私はそれから遠く離れている...)、私はこのようにとどまりたい。数日経ってもそれでも何も見つからなければ、私はブラウザの方法で行くつもりです。 – Maxime

関連する問題