Snoopy.class.php爬虫抓取https链接第二层出错基础URL重复补全解决方法

最近在研究网页爬虫程序,选择了Snoopy这个爬虫,但是在抓取https的链接第二层链接时(即首页上的超级链接),抓取的链接出现以下错误,例:正确链接是https://www.baidu.com/s?wd=1,而程序抓取的链接是https://www.baidu.com/https://www.baidu.com/s?wd=1,而在抓取http链接时不会发生这种错误。

根据分析,是代码中的_expandlinks函数在处理时重复补全域名,而http不会出现这个问题,说明是有判断链接是否完整的,完整则不会补全。

但是只判断了http的链接,没有判断https链接,所以我们只需要在_expandlinks函数中接入对https的判断支持即可。

整个_expandlinks函数替换:

function _expandlinks($links,$URI)
{
preg_match(“/^[^\?]+/”,$URI,$match);
$match = preg_replace(“|/[^\/\.]+\.[^\/\.]+$|”,””,$match[0]);
$match = preg_replace(“|/$|”,””,$match);
$match_part = parse_url($match);
$match_root =
$match_part[“scheme”].”://”.$match_part[“host”];
$search = array( “|^https?://”.preg_quote($this->host).”|i”,  // 修改这里,增加https支持
“|^(\/)|i”,
“|^(?!https?://)(?!mailto:)|i”,  // 修改这里,增加https支持
“|/\./|”,
“|/[^\/]+/\.\./|”
);
$replace = array(“”,
$match_root.”/”,
$match.”/”,
“/”,
“/”
);
$expandedLinks = preg_replace($search,$replace,$links);
return $expandedLinks;
}

本文来自投稿,不代表首晒立场,如若转载,请注明出处:https://www.shoushai.com/p/1706

喜欢 (0)

发表回复

登录后才能评论

猜你喜欢