Heim > Fragen und Antworten > Hauptteil
用 Node.js 的 http
来抓取某页面:
var http = require('http');
http.get('http://example.com', function (res) {
console.log(res.statusCode);
});
返回的状态码是 404,但是网页能够正常访问,我用自己服务器测试也是一样,所以应该没有 ban 掉我的 ip。这是否代表着对方已经通过服务器端禁掉了他人的抓取?
还有就顺带求教,这是如何做到的?
胡乱猜测,求各位大大指点一下,以上。
ringa_lee2017-04-17 11:32:38
检查一下User-Agent
和Referer
,另外再看看Cookie
,还有那个网页是不是用Ajax动态生成的。
你可以用Chrome的“开发者工具”或者Firebug看看浏览器再打开这个网页时都发了哪些东西,然后把这些东西都加到你的请求里去。
阿神2017-04-17 11:32:38
你說的網站,我正常抓取。
不知是你程序有何錯誤,抓取其它網站如何?
<?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];
}
你用我寫的這個試試?反正我這裏成功。