跟踪301重定向获取落地页域名的php代码

 2024-09-04  阅读 295  评论 0  点赞 0

摘要:很多网站设置了301重定向,禁止游客访问,只允许百度ua真实跳转。下面的php可以实现规则适配,批量抓取,并保存真实的落地页。首先我们新建一个url.txt,里面放上域名及规则,一行一个,比如:https://www.weihangapi.cn/{数字5}.html

很多网站设置了301重定向,禁止游客访问,只允许百度ua真实跳转。

跟踪301重定向获取落地页域名的php代码

下面的php可以实现规则适配,批量抓取,并保存真实的落地页。

首先我们新建一个url.txt,里面放上域名及规则,一行一个,比如:https://www.weihangapi.cn/{数字5}.html

然后我们新建一个php,代码如下:

<?php
// 读取url.txt文件中的域名列表
$urls = file('url.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

// 支持的标签
$tags = [
    '{年}' => date('Y'),
    '{月}' => date('m'),
    '{日}' => date('d'),
    '{时}' => date('H'),
    '{分}' => date('i'),
    '{秒}' => date('s')
];

// 创建一个用于保存301重定向后页面的数组
$redirects = [];

// 遍历域名列表
foreach ($urls as $url) {
    // 替换URL中的标签
    foreach ($tags as $tag => $value) {
        $url = str_replace($tag, $value, $url);
    }
    
    // 匹配并替换{n}为随机数
    preg_match_all('/{数字(\d+)}/', $url, $matches);
    foreach ($matches[1] as $match) {
        $replace = '';
        for ($i = 0; $i < $match; $i++) {
            $replace .= mt_rand(0, 9);
        }
        $url = str_replace('{数字'.$match.'}', $replace, $url);
    }
    
    // 模拟百度蜘蛛访问
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)');
    
    // 添加等待时间(单位:秒)
    $waitTime = 3;
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $waitTime); // 连接超时时间
    curl_setopt($ch, CURLOPT_TIMEOUT, $waitTime); // 总超时时间
    
    curl_exec($ch);
    
    // 获取重定向后的地址
    $redirectUrl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
    
    // 提取根域名
    $parsedUrl = parse_url($redirectUrl);
    $rootDomain = getRootDomain($parsedUrl['host']);
    
    // 关闭curl请求
    curl_close($ch);
    
    // 判断是否已经存在相同的根域名,如果不存在则添加到数组中
    if (!in_array($rootDomain, $redirects)) {
        $redirects[] = $rootDomain;
    }
}

// 将重定向地址写入301.txt文件
file_put_contents('301.txt', implode(PHP_EOL, $redirects));

echo '完成!';

/**
 * 取得根域名
 * @param string $domain 域名
 * @return string 返回根域名
 */
function getRootDomain($domain) {
    $re_domain = "";
    $domain_postfix_cn_array = array("com", "net", "org", "gov", "edu", "icu","top","com.cn", "cn");
    $array_domain = explode(".", $domain);
    $array_num = count($array_domain) - 1;
    
    if ($array_domain[$array_num] == 'cn') {
        if (in_array($array_domain[$array_num - 1], $domain_postfix_cn_array)) {
            $re_domain = $array_domain[$array_num - 2] . "." . $array_domain[$array_num - 1] . "." . $array_domain[$array_num];
        } else {
            $re_domain = $array_domain[$array_num - 1] . "." . $array_domain[$array_num];
        }
    } else {
        $re_domain = $array_domain[$array_num - 1] . "." . $array_domain[$array_num];
    }
    
    return $re_domain;
}
?>

我们访问上面的php文件,即可实现抓取url.txt里面的网站,它会自动获取301后的目标页面,自动去重,只保留根域名在301.txt中。

标签:php

发表评论:

管理员

承接各种程序开发,外贸网站代运营,外贸网站建设等项目
  • 内容185
  • 积分66666
  • 金币66666

Copyright © 2024 LS'Blog-保定PHP程序员老宋个人博客 Inc. 保留所有权利。 Powered by LS'blog 3.0.3

页面耗时0.0234秒, 内存占用1.88 MB, 访问数据库22次

冀ICP备19034377号