抓取数据时禁止显示

时间:2012-12-25 05:44:25

标签: php

我想从网站上获取数据。但它显示我被禁止。 看看这段代码:

<?php
$link='http://www.sitedossier.com/site/wikipedia.org';
$so=file_get_contents($link);
echo ($link);
echo "</br>";
echo ($so);
?>

但它显示被禁止。脚本结果是:

http://www.sitedossier.com/site/wikipedia.org
Forbidden.

但是如果我只提供主站点名称:http://www.sitedossier.com来获取数据。它抓住了。

这是什么问题?我的脚本错误或任何脚本禁止站点? 如果那样,那我该怎样绕过呢?

谢谢

2 个答案:

答案 0 :(得分:1)

有些网站不喜欢机器人。 如果你有cURL,你可以解决这个问题:

<?php
$ch = curl_init('http://www.sitedossier.com/site/wikipedia.org');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:20.0) Gecko/20121221 Firefox/20.0');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_REFERER, 'http://www.sitedossier.com');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');

$data = curl_exec($ch);
echo $data;
?>

编辑: 它现在有效。我猜他们设置了网站所需的cookie。

答案 1 :(得分:0)

该网站需要一个用户代理字符串,file_get_contents不发送。

使用fsockopen及相关功能确保发送正确的标头。