PHP-php在抓取网页内容的时候如何过滤标题中的关键字
是这样的,php通过file_get_contents获取网页内容后,要获取网页中的标题title的内容,但是有时候网页标题是带有关键字的,比如:title为[仙境幻想]制胜一击新服活动-昆仑在线,我想把-昆仑在线过滤掉,当然了像这样的关键字可能有好几个。如何实现把所以的关键字去掉呢,谢谢啦!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
代码我就不写了,给两条思路:
1、建立过滤词汇表,将表中有的词过滤掉
2、对比多个页面获取到的title,把多个页面都有的词汇,如你举例的“_昆仑在线”这个词找出来,然后再把所有title过滤一遍
可以将两个方法结合起来使用
这个问题很简单吧?用正则替换就能做到了。。
$title = '[仙境幻想]制胜这是标题后边为关键词-昆仑在线-一击新服活动-昆仑在线_关键词1-关键词2';
echo preg_replace("/([-_][^-_]+)/is",'',$title);
如果出现 -- 或者 __ 也要过滤的话,那么正则写成 /([-_]+[^-_]+)/is 就可以了。
<?php
$html = "<html><head><title>[仙境幻想]制胜一击新服活动-昆仑在线[仙境幻想]制胜一击新服活动_昆仑在线[仙境幻想]制胜一击新服活动-昆仑在线</title></head><body>test</body></html>";
var_dump($html);
preg_match('/<title>(.*)</title>/', $html, $title);
$title[1] = str_replace(array('-昆仑在线', '_昆仑在线'), '', $title[1]);
$html = str_replace($title[0], "<title>$title[1]</title>", $html);
var_dump($html);
?>
把title内容进行分割,显示第一个元素:
preg_match('/<title>(.*)</title>/', $html, $title);
$titles = preg_split("/[-_s|—]/i", $title);
$titlestr = $title[0];
//获取标题内容
$preg = "/<title[^>]>([w|t|r|W]?)</title>/i";
preg_match($preg, $contents, $matches);
$title = $matches[1];
//对标题分隔
$titles = preg_split("/[-_s|—]/i", $title);
//把字符长度最长的当做标题
$maxIndex = 0;
$maxLength = 0;
$loop = 0;
foreach($titles as $item){
if(strlen($item)>$maxLength){
$maxLength = strlen($item);
$maxIndex = $loop;
}
$loop++;
}
echo $titles[$maxIndex];
首先匹配出<title></title>里的内容,然后通过‘-’或‘_’进行分割,分割出来的内容,我是根据字符串最长的最为真正的标题内容的。
看人是抓什么网页,一般的文章网页的话,真正的标题在HTML代码中出现的不只是TITLE标签里,很可能其他标签里有标题,且没有其他字符的,提取即可。如果没有这样的,那只能通过TITLE标签来分析,一般都有一个固定的格式,把标题以外的过滤掉即可!!