node.js - 关于抓取网页被禁止的问题
PHP中文网
PHP中文网 2017-04-17 11:30:38
0
6
569

用 Node.js 的 http 来抓取某页面:

var http = require('http');

http.get('http://example.com', function (res) {
  console.log(res.statusCode);
});

返回的状态码是 404,但是网页能够正常访问,我用自己服务器测试也是一样,所以应该没有 ban 掉我的 ip。这是否代表着对方已经通过服务器端禁掉了他人的抓取?
还有就顺带求教,这是如何做到的?

胡乱猜测,求各位大大指点一下,以上。

PHP中文网
PHP中文网

认证高级PHP讲师

全部回覆(6)
左手右手慢动作

檢查一下User-AgentReferer,另外再看看Cookie,還有那個網頁是不是用Ajax動態產生的。
你可以用Chrome的「開發者工具」或Firebug看看瀏覽器再開啟這個網頁時都發了哪些東西,然後把這些東西都加到你的請求裡去。

巴扎黑

你可以看看 pyspider 爬蟲教學(二):AJAX 和 HTTP
雖然是基於 pyspider 寫得,但原理講的比較多

阿神

你說的網站,我正常抓取。

不知是你程式有何錯誤,抓取其它網站如何?

<?php

$res = get('http://www.1yyg.com/');

echo $res[0];
echo $res[1];

function get($url, $cookie = '', $referer = '') {
    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_REFERER => $referer, 
        CURLOPT_USERAGENT => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2164.0 Safari/537.36',
        CURLOPT_COOKIE => $cookie,
        CURLOPT_HEADER => 1,
        CURLOPT_RETURNTRANSFER => 1, 
        CURLOPT_TIMEOUT => 4
    ]);

    $response = curl_exec($ch);
    $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
    $header = substr($response, 0, $header_size); //http_parse_headers
    $body = substr($response, $header_size);

    curl_close($ch);
    return [$header, $body];
}

你用我寫的這個試試?反正我這裡成功。

伊谢尔伦

我猜可能是設定了 Content-Security-Policy

大家讲道理

把瀏覽器發送請求時的所有header都加上,應該可以的。

PHPzhong

很簡單,你的header沒有UA,直接被伺服器攔截成攻擊,加上UA,Referer等就可以抓到了

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板