最近在研究网页爬虫程序,选择了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