【问题标题】:php web spider. how to identify url with hash as same page?php 网络蜘蛛。如何将带有哈希的网址识别为同一页面?
【发布时间】:2014-11-18 11:15:39
【问题描述】:

我有一个函数:

public function getHeaders($url){
        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL,            $url);
        curl_setopt($ch, CURLOPT_HEADER,         true);
        curl_setopt($ch, CURLOPT_NOBODY,         true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT,        10);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
        $x = curl_exec($ch);

        curl_close($ch);
        return (array) HTTP::parse_header_string($x) ;
    }

当$url=http://www.google.com', i have header location:http://www.google.de/?gfe_rd=cr&ei=SOMEHASHGOESHERE` 再次加载它并得到相同的结果,但是现在“SOMEHASHGOESHERE”是另一个。

我的任务是开发网络爬虫。我知道如何做它的基本逻辑。但几乎没有细微差别。其中之一是:如果请求的 url 发送到它的标题“位置”并尝试重定向,我的蜘蛛必须做什么?什么行为模型必须控制我的蜘蛛不可能将其放入无限重定向循环?

(如何识别像http://www.google.de/?gfe_rd=cr&ei=SOMEHASHGOESHERE 这样通常用于循环重定向的类似网址,并让我的蜘蛛理解忽略此类链接)

【问题讨论】:

  • 我不关注。您是在寻找特定于谷歌的答案还是一般的答案?
  • 既然您似乎在寻求通用解决方案,那么设置CURLOPT_MAXREDIRS有什么问题?
  • 没问题,我几个小时前才看到。谢谢,但我已经用递归调用限制解决了我的函数))

标签: php web-crawler url-redirection


【解决方案1】:

如果您尝试只处理所有重定向的目标,您可以让 curl 跟随 url 而无需返回重定向页面。

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

如果您只对没有 url 参数的基本 url 感兴趣,您可以使用 explode 轻松获得它:

$urlParts = explode("?",$url);
$baseUrl = $urlParts[0];

【讨论】:

  • 我认为这是个坏主意。当蜘蛛分析某些具有特定链接的特定站点时会发生什么会产生循环重定向?例如,我认为计算重定向并在重定向计数超过 5 时中断。但也有兴趣查看其他解决方案。
  • 如果你能更彻底地解释你的问题,我可以回答。
  • 好的,我试试。我的答案已编辑。附言抱歉英语不好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-30
  • 2015-04-23
相关资源
最近更新 更多