【问题标题】:PHP scraping return 403 ForbiddenPHP抓取返回403 Forbidden
【发布时间】:2014-04-08 12:19:02
【问题描述】:

我正在尝试抓取此网页,但是当我回显 img 脚本时。是返回 403 Forbidden-nginx/1.4.3

有人可以帮忙吗?

这是我的代码:

$url = '1cak.com/trending-0-&ajax_seek=1396912798&seek_max_time=1396921201';

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch,CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17)');
curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE);
$curl_scraped_page = curl_exec($ch);

$html = new simple_html_dom();
$html->load($curl_scraped_page);


foreach($html->find('div[style="border-bottom:1px solid #ccc;padding-bottom:10px;padding-top:10px"]') as $item){
    echo $item->find('img',0)->src ."<br/>";
    echo "<img src=".$item->find('img',0)->src."><br/>";
}

【问题讨论】:

  • 也许有人不希望你这样做。 ;)

标签: php curl web-scraping simple-html-dom


【解决方案1】:

错误 403 可能意味着一些事情:

  1. 您的 IP 已被阻止,因为您尝试抓取数据的次数过多,您对此无能为力(除了使用某种代理,但这是另一个问题)。您可以通过在 Web 浏览器中尝试来自服务器的相同页面来测试这一点(如果您只能访问 ssh,则为 chrome/chromium 或 lynx)。

  2. 页面可以通过用户代理或引用者或类似的方式控制访问者。由于您已经在尝试模拟浏览器,我认为这不是这里的问题。

【讨论】:

    【解决方案2】:

    在回显大量数据时,我多次遇到“禁止”错误。在开发复杂的 PHP 脚本时,我倾向于加入很多“诊断”回声。

    我发现的唯一解决方法是尽可能多地删除诊断回显语句。我还没有确定回声限制是多少,但我怀疑每个网络主机都会有所不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 2021-03-24
      • 2012-08-26
      • 1970-01-01
      • 2020-05-11
      • 2018-06-30
      相关资源
      最近更新 更多