私はウェブサイト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で書かれた)私のコードです返す必要があります+)のログを保存し、できるだけ早く私は続けるボタンをクリックすると、それは私にこの例を示します
を私は本当に「I」と「submitform」は十分だろう、「キー」を渡すと思いましたしかし、そうではありません。 URLを使って2番目のページに行くのではなく、最初のページに戻るだけです。
uptoboxのリンク(この場合)を出力として取得する方法についての手掛かりは本当に素晴らしいでしょう。
ありがとうございます!
実際の質問は何ですか? –
質問は、あなたが私が望むページに到達できない理由を知っていますか?たぶん私は明確ではなかった、言い換えれば私に説明させてください:) 2ページあります。最初のリンクが表示されているリンクを開き(続行ボタン付き)、リンクをクリックすると保護されたリンクを持つ2ページ目を表示します。私のコードでは、私はそれをシミュレートしようとします。だから基本的に私はなぜ私が出力としてuptoboxリンクを得ることができないのか理解したいと思いますか? – Maxime
[浸透](https://github.com/rchipka/node-osmosis)や[PhantomJs](http://phantomjs.org/)のようなヘッドレスブラウザフレームワークのようなスクレイピングライブラリを見てください。 –