【问题标题】:PHP Page Scraping - cUrl Redirect ProblemPHP 页面抓取 - cUrl 重定向问题
【发布时间】:2011-05-30 23:14:28
【问题描述】:

我正在尝试抓取此链接:https://www.bu.edu/link/bin/uiscgi_studentlink/1293403322?College=SMG&Dept=AC&Course=222&Section=C1&Subject=ACCT &MtgDay=&MtgTime=&ModuleName=univschr.pl&KeySem=20114&ViewSem=Spring+2011&SearchOptionCd=C&SearchOptionDesc=Class+Subject&MainCampusInd=。 (如果你在浏览器中访问它就可以正常工作。)

所以我卷曲它,使用这个代码:

function curl_classes($url){
  $ch = curl_init();
  $userAgent = 'Googlebot/2.1 (http://www.googlebot.com/bot.html)';
  curl_setopt($ch,CURLOPT_USERAGENT, $userAgent);
  curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
  curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  echo "NOW IM REALY GOING TO: " . $url;
  curl_setopt($ch,CURLOPT_URL,$url);
  curl_setopt($ch, CURLOPT_FAILONERROR, true);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
  curl_setopt($ch, CURLOPT_AUTOREFERER, true);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
  curl_setopt($ch, CURLOPT_TIMEOUT, 50);
  curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);

  $html = curl_exec($ch);
  curl_close($ch);
  unset($ch);
  if (!$html) {
    echo "<br />cURL error number:" .curl_errno($ch);
    echo "<br />cURL error:" . curl_error($ch);
    exit;
  }
  echo htmlspecialchar($html);
} 

编辑

好的,新问题。我的 cookie 存储代码似乎不起作用。我可以根据需要抓取这个:bu[DOT]edu/link/bin/uiscgi_studentlink/1293357973?ModuleName=univschr.pl&SearchOptionDesc=Class+Subject&SearchOptionCd=C&KeySem=20114&ViewSem=Spring+2011&Subject=ACCT&MtgDay=&MtgTime=

但是当我尝试抓取这篇文章顶部的链接时,我得到:“抱歉,您需要启用 cookie...”

我在 cookie 存储代码中做错了什么?

【问题讨论】:

    标签: php html curl web-scraping


    【解决方案1】:

    我打赌你确实可以访问 HTML。它将 HTML 打印到屏幕上,该 HTML 包含将您重定向到新页面的代码。

    尝试输出 HTML 的编码版本,以便浏览器将其解释为纯文本:

    echo htmlspecialchars($html);
    

    但是,查看您的实际代码:请不要假装自己是 Google。你不是 Googlebot,所以你的脚本不应该说你是。如果您完全包含任何用户代理(我建议您这样做),请使其反映您的身份,以防网站所有者遇到您的机器人问题。不必遮遮掩掩:)

    【讨论】:

    • 嗯。这修复了重定向,但现在它正在为没有类信息的非 cookie 浏览器加载页面。如果您能阅读帖子编辑,我将不胜感激。
    • @Pauly:一些用户报告说他们需要使用绝对路径才能让他们的 COOKIEJAR 和 COOKIEFILE 条目工作:/
    【解决方案2】:

    由于您在浏览器中回显内容,因此将执行远程页面中的任何 javascript。大概有什么东西正在重定向页面。

    【讨论】:

    • 有没有办法在回显时禁用 javascript?否则,如果没有 echo,我怎么能看到 $html 中的内容?
    • 简单地说,在 textarea 中回显 html :-)
    【解决方案3】:

    如果您有烦人的 javascript,您可以将 html 写入文件,然后在编辑器中打开该文件。或者只是在浏览器中禁用 JS。

    【讨论】:

      猜你喜欢
      • 2017-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多