泛目录爬词工具PHP代码
本帖最后由 小麦子 于 2024-10-21 12:16 编辑有朋友找我们开发泛目录爬词工具,简单写了个php的demo,没收费,免费分享出来。
使用方法
php程序,无限循环,挂机宝塔定时任务就可以。url.txt填写需要抓取的域名的规则,如:www.niuniubbs.com/{数字3}.html。no.txt填写过滤词,一行一个。
以上只是部份演示图片,详细可以付费购买。
<?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) { // 根据占位符的内容进行不同的替换
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. 责任:采集数据时遵循尊重他人的原则,如果使用他人的数据应该注明出处并获得合法许可。总之,在进行数据采集时,需要保证合法性、速率控制、数据清洗、数据存储和负责任的态度。
大佬才需要到这个,比如我(来自百万流量站长的回复) 没分了呢··· 独战天下 发表于 2025-3-31 18:03
没分了呢···
可能联系客服进行购买。 5个积分,便宜,我来搞搞看 feng 发表于 2025-4-29 11:06
5个积分,便宜,我来搞搞看
感谢对牛牛论坛的支持!
页:
[1]