本站所有内容仅限用于学习和研究目的,如有侵权请邮件与我们联系处理!
世上事本无难易,为之则易!

网站首页 站群教程 原创站群教程 正文

泛目录爬词工具PHP代码

曹操 2023-06-16 原创站群教程 4089 ℃ 47 评论 12673字 free 收藏

有朋友找我们开发泛目录爬词工具,简单写了个php的demo,没收费,免费分享出来。

使用方法

php程序,无限循环,挂机宝塔定时任务就可以。

url.txt填写需要抓取的域名的规则,如:www.zqcx.cn/{数字3}.html。

no.txt填写过滤词,一行一个。

思路

在url.txt有域名,一行一个,支持规则 {年}、 {月}、 {日}、 {时}、 {分}、 {秒}、 {数字5}、 {字母5}、 {字符5}

读取url.txt的一行文件,并根据规则生成网址;

使用curl访问该网址,模拟百度ua,访问生成后的网址,读取标题,关键词,及描述三个数据,如果为空则不保存;

将这三个数据经过no.txt(过滤词文件,一行一个)的过滤后;

将数据分别存储到title.txt,key.txt,description.txt,这三个txt如果没有则新建,如果有了则追加内容在下一行;

未完善的部分

为了追求速度,未考虑到抓取内容的重复,后期需要使用其他php过滤重复行。

成品代码

为了便于理解,特为每行代码加了注释。

<?php
$url_file = "url.txt"; // 存储需要访问的URL的文件名
$keyword_file = "no.txt"; // 存储过滤关键词的文件名
$title_file = "title.txt"; // 存储抓取到的页面标题的文件名
$key_file = "key.txt"; // 存储抓取到的页面关键词的文件名
$description_file = "description.txt"; // 存储抓取到的页面描述的文件名

while (true) { // 进入死循环,不断遍历 URL 列表并访问对应的网页进行内容抓取
    if ($file = fopen($url_file, "r")) { // 以只读模式打开 URL 列表文件,如果打开成功
        while(!feof($file)) { // 遍历文件中的每一行 URL
            $line = fgets($file); // 读取一行 URL
            $line = trim($line); // 去除 URL 前后的空格和换行符
            if (!$line) { // 如果 URL 是空的或者只包含空格和换行符,则不做处理,继续循环下一行
                continue;
            }
            $new_url = preg_replace_callback("/{(.*?)}/", function ($match) { // 将 URL 中的占位符替换为实际的值,即当前时间、随机数、随机字符串等
                switch ($match[1]) { // 根据占位符的内容进行不同的替换
                    case "年":
                        return date("Y");
                    case "月":
                        return date("m");
                    case "日":
                        return date("d");
                    case "时":
                        return date("H");
                    case "分":
                        return date("i");
                    case "秒":
                        return date("s");
                    case "数字5":
                        return rand(10000, 99999);
                    case "字母5":
                        return substr(str_shuffle("abcdefghijklmnopqrstuvwxyz"),0,5);
                    case "字符5":
                        return substr(str_shuffle("abcdefghijklmnopqrstuvwxyz0123456789"),0,5);
                }
            }, $line);

            $ch = curl_init(); // 初始化一个 cURL 对象
            curl_setopt($ch, CURLOPT_URL, $new_url); // 设置要访问的 URL
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 将结果保存到变量而不是输出到屏幕上
            curl_setopt($ch, CURLOPT_HTTPHEADER, array( // 设置 HTTP 头,模拟浏览器发送请求
                "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36"
            ));
            $html = curl_exec($ch); // 发送请求并获取页面内容
            curl_close($ch); // 关闭 cURL 对象

            $doc = new DOMDocument(); // 创建一个新的 DOMDocument 对象,用于解析 HTML
            @$doc->loadHTML('<?xml encoding="UTF-8">' . $html); // 将页面内容转化为 XML 格式,并加载到 DOMDocument 中

            $title = $doc->getElementsByTagName('title')->item(0)->nodeValue; // 获取页面标题

            $metas = $doc->getElementsByTagName('meta'); // 获取页面上的 meta 标签
            $description = ""; // 初始化页面描述变量
            $keywords = ""; // 初始化页面关键词变量
            for ($i = 0; $i < $metas->length; $i++) { // 遍历每一个 meta 标签
                $meta = $metas->item($i);
                if (strtolower($meta->getAttribute('name')) == 'description') { // 如果当前标签的 name 属性是 description,则获取其 content 属性的值作为页面描述
                    $description = $meta->getAttribute('content');
                }
                if (strtolower($meta->getAttribute('name')) == 'keywords') { // 如果当前标签的 name 属性是 keywords,则获取其 content 属性的值作为页面关键词
                    $keywords = $meta->getAttribute('content');
                }
            }

            $no_array = file($keyword_file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // 将过滤关键词列表文件中的内容读取到数组中

            $filtered_title = filter($title, $no_array); // 对页面标题进行过滤,并返回过滤后的内容
            $filtered_keywords = filter($keywords, $no_array); // 对页面关键词进行过滤,并返回过滤后的内容
            $filtered_description = filter($description, $no_array); // 对页面描述进行过滤,并返回过滤后的内容

            if ($filtered_title) { // 如果过滤后的标题不为空,则将其写入到标题文件中
                file_put_contents($title_file, $filtered_title . "\n", FILE_APPEND | LOCK_EX);
            }
            if ($filtered_keywords) { // 如果过滤后的关键词不为空,则将其写入到关键词文件中
                file_put_contents($key_file, $filtered_keywords . "\n", FILE_APPEND | LOCK_EX);
            }
            if ($filtered_description) { // 如果过滤后的描述不为空,则将其写入到描述文件中
                file_put_contents($description_file, $filtered_description . "\n", FILE_APPEND | LOCK_EX);
            }

            sleep(1); // 休息一秒,防止过于频繁地访问网页
        }
        fclose($file); // 关闭 URL 列表文件
    }
}

function filter($str, $no_array) { // 过滤函数
    $filtered_str = trim(preg_replace('/\s+/', ' ', $str)); // 去除多余的空格和换行符
    foreach ($no_array as $no) { // 遍历过滤关键词数组
        if (stripos($filtered_str, $no) !== false) { // 如果当前字符串中包含任意一个过滤关键词,则返回 false,表示需要被过滤掉
            return false;
        }
    }
    return $filtered_str; // 如果没有匹配到任何过滤关键词,则返回过滤后的内容
}

友情提示

当使用PHP采集工具进行数据采集时,需要注意以下几点:

1. 合法性:确保你要采集的内容是合法且没有侵犯任何版权或隐私权的。不要采集敏感信息或者对他人造成不当的影响。

2. 速率控制:在进行数据爬取时,应该确保你的程序不会在短时间内频繁访问同一个网站,否则会被识别为恶意行为并被禁止访问。因此,设置适当的访问时间间隔和速率限制非常重要。

3. 数据清洗:采集到的数据可能存在一些不规则的格式或错误的字符,这些问题需要及时清洗,确保数据的准确性和完整性。

4. 数据存储:在采集数据后,应该把它们存储到数据库或者文件里面,并设置好相关的索引等等,以便后续的使用和管理。

5. 责任:采集数据时遵循尊重他人的原则,如果使用他人的数据应该注明出处并获得合法许可。

总之,在进行数据采集时,需要保证合法性、速率控制、数据清洗、数据存储和负责任的态度。

目录导航
  • 使用方法
  • 思路
  • 未完善的部分
  • 成品代码
  • 友情提示

  • Tags:泛目录域名数据库

    必看说明

    • 本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。
    • 本站文章或仅为文本内容原创,非程序原创。如有侵权、不妥之处,请联系站长第一时间删除。敬请谅解!
    • 本站所有内容严格遵守国家法律的条例,所有研究的算法技术均来源于搜索引擎公开默认允许用户研究使用的接口。
    • 阅读本文及获取资源前,请确保您已充分阅读并理解《访问曹操SEO网站需知:行为准则》。
    • 本站分享的任何工具、程序仅供学习参考编写架构,仅可在本地的虚拟机内断网测试,严禁联网运行或上传搭建!
    • 任何资源必须在下载后24个小时内,从电脑中彻底删除。不得传播或者用于其他任何用途!否则一切后果用户自负!
    • 转载请注明 : 文章转载自  站群程序 泛目录爬词工具PHP代码
    • 本文标题:《泛目录爬词工具PHP代码》
    • 本文链接:http://www.zqcx.cn/1999.html

    已有47位网友发表了看法:

    • huihui

      huihui  评论于 [2023-07-31 21:47:30]  回复

      怎么使用呢

    欢迎 发表评论:

    网站分类
    近期评论
    文章归档
    标签列表
    站点信息
    • 文章总数:2024
    • 页面总数:7
    • 分类总数:46
    • 标签总数:339
    • 评论总数:9367
    • 浏览总数:5890750