php在抓取网页内容的时候如何过滤标题中的关键字

是这样的,php通过file_get_contents获取网页内容后,要获取网页中的标题title的内容,但是有时候网页标题是带有关键字的,比如:title为[仙境幻想]制胜一击新服活动-昆仑在线,我想把-昆仑在线过滤掉,当然了像这样的关键字可能有好几个。如何实现把所以的关键字去掉呢,谢谢啦!

许磊
许磊
218
编辑于2012-05-16
评论 (1)链接2012-02-04 
  • 0 支持
    补充一下有的网站是‘-’分割,有的是‘_’来分割的 – 飞天 2012-02-04

把title内容进行分割,显示第一个元素:

  
preg_match('/<title>(.*)<\/title>/', $html, $title); 

$titles = preg_split("/[-_\s|—]/i", $title);

$titlestr = $title[0];
该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (2)链接 • 2012-02-04
  • 0 支持
    如果像飞天所说的,你这个是不行的,如果标题是这样的呢,它要过滤的,因为标题中也有可能有横线分隔符
    [仙境幻想]-新服活动-昆仑在线
    – 浪际天涯 2012-02-04
  • 0 支持
    看看我写的,我是以字符串最长的最为title的内容 – 张洪保 2012-02-04
  
//获取标题内容

$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>里的内容,然后通过‘-’或‘_’进行分割,分割出来的内容,我是根据字符串最长的最为真正的标题内容的。

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (1)链接 • 2012-02-04
  • 0 支持
    这样的方法是比较可行,但是还是一样,标题中有以-或者_分隔的,那标题就会被截成一半,不完整,很多新闻页面标题都会有-分隔 – 浪际天涯 2012-02-04

代码我就不写了,给两条思路:

1、建立过滤词汇表,将表中有的词过滤掉

2、对比多个页面获取到的title,把多个页面都有的词汇,如你举例的“_昆仑在线”这个词找出来,然后再把所有title过滤一遍

可以将两个方法结合起来使用

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-02-04

这个问题很简单吧?用正则替换就能做到了。。

$title = '[仙境幻想]制胜这是标题后边为关键词-昆仑在线-一击新服活动-昆仑在线_关键词1-关键词2';

echo preg_replace("/([-_][^-_]+)/is",'',$title);

如果出现 -- 或者 __ 也要过滤的话,那么正则写成 /([-_]+[^-_]+)/is 就可以了。

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-02-04

<?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);
?>

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (3)链接 • 2012-02-04
  • 0 支持
    感谢浪际天涯,上面是举了个例子,你并不知道关键字是‘昆仑在线’,而且抓取很多页面批量处理的 – 飞天 2012-02-04
  • 0 支持
    如果是这样,那就比较难办了,因为你连要过滤什么都不知道,这就比较难办了 – 浪际天涯 2012-02-04
  • 0 支持
    @飞天 连过滤什么都不知道?这或许不该叫做一个问题了吧,是个难题~哈哈 – 褚洪波 2012-10-30

看人是抓什么网页,一般的文章网页的话,真正的标题在HTML代码中出现的不只是TITLE标签里,很可能其他标签里有标题,且没有其他字符的,提取即可。如果没有这样的,那只能通过TITLE标签来分析,一般都有一个固定的格式,把标题以外的过滤掉即可!!

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2014-06-27
德问是一个专业的编程问答社区,请 登录注册 后再提交答案