2017-02-04 21 views
1

Nodejsで「https://www.ukr.net/ua/news/sport.html」というページを削りたい。 I`mは、「要求」NPMモジュールの基本的なGETリクエストをしようと、ここでの例です:ノードを掻き集める

const inspect = require('eyespect').inspector(); 
const request = require('request'); 
const url = 'https://www.ukr.net/news/dat/sport/2/'; 
const options = { 
    method: 'get', 
    json: true, 
    url: url 
}; 

request(options, (err, res, body) => { 
    if (err) { 
     inspect(err, 'error posting json'); 
     return 
    } 
    const headers = res.headers; 
    const statusCode = res.statusCode; 
    inspect(headers, 'headers'); 
    inspect(statusCode, 'statusCode'); 
    inspect(body, 'body'); 
}); 

しかし、私はポストマンからの要求を得ることを確認した場合、応答本体に、私は唯一の

body: '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 
Transitional//EN">\n<html>\n<head>\n<META HTTP-EQUIV="expires" 
CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">\n<META HTTP-EQUIV=Refresh 
CONTENT="10">\n<meta HTTP-EQUIV="Content-type" CONTENT="text/html; 
charset=utf-8">\n<title>www.ukr.net</title>\n</head>\n<body>\n 
Идет загрузка, подождите .....\n</body>\n</html>' 

を取得し、私は私が必要とする正確に何を得る:

enter image description here

私の男を助けてください。

+0

'Идетのзагрузкаは、подождите.....' = 'ロード、待ってください....' - あなたがこすりしようとしているページが動的にロードされた要素を持っているので、あなたの最初のリクエストには、代わりに "読み込み中"のメッセージが表示されます。おそらく、あなたのページをレンダリングするためにファンタムjsのようなものを使うことができますか? http://stackoverflow.com/a/31059035/459517 - 郵便配達員はおそらくこのようなことを自動的に行っています。 – Robbie

答えて

1

あなたはボットの保護によってブロックされている可能性があります。これはcurlで確認できます。

curl -vL https://www.ukr.net/news/dat/sport/2/

結果を得るように見えるカールとカールは、ノードからの要求で欠けている何かがおそらく存在し機能していれば、解決策は、あなたの好みのブラウザを模倣することができます。例えば

- ここでは、開発者ツールから取られたクロムのような要求の例である:あなたが経験をお持ちの場合

const options = { 
    method: 'get', 
    json: true, 
    url: url, 
    gzip: true, 
    headers: { 
     "Host": "www.ukr.net", 
     "Pragma": "no-cache", 
     "Cache-Control": "no-cache", 
     "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36", 
     "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", 
     "Accept-Encoding": "gzip, deflate, sdch, br", 
     "Accept-Language": "en-US,en;q=0.8" 
    } 
}; 
+0

ありがとうございました!できます;) –

1

enter image description here

は、要求のために、以下のオプションを導出しますjqueryには、例えばHTMLにアクセスするためのライブラリがあります。私たちが使うことになる

マークアップの例:

<ul id="fruits"> 
    <li class="apple">Apple</li> 
    <li class="orange">Orange</li> 
    <li class="pear">Pear</li> 
</ul> 

まずあなたがHTMLにロードする必要があります。 jQueryのこのステップは暗黙的です。jQueryは焼き付けられたDOMで動作するためです。 Cheerioでは、HTML文書を渡す必要があります。

$('ul .pear').attr('class') 

var cheerio = require('cheerio'); 

$ = cheerio.load('<ul id="fruits">...</ul>'); 

セレクタは、おそらくあなたは、このような何かを行うことができます。

request(options, (err, res, body) => { 

    var $ = cheerio.load(html); 

}) 

https://github.com/cheeriojs/cheerio

関連する問題