正则表达式的简单应用:使用正则表达式采集腾讯新闻

优采云 发布时间: 2020-08-13 09:18

  正则表达式的简单应用:使用正则表达式采集腾讯新闻

  正则表达式(Regular Expression)是比较冗长的,要记的东西比较多,因此我始终都没有腾出时间专门好好研究一下正则表达式,最近网站需要用到PHP的CURL获取腾讯新闻,所以就认真地学了一下正则表达式。正则表达式是十分强悍的,学会了正则表达式,在之后的文本匹配中,那是杠杠的。话不多说,进入题外话。

  关于正则表达式的一些基础句型,大家可以看一下下边的参考链接,讲解十分到位。

  引用《深入正则表达式应用》的“正则三段论”:定锚点,去杂讯,取数据。

  1.首先,我想要从获取科技新闻头条,以及新闻列表,如图所示。

  

  

  2.点击“查看网页源代码”Ctrl+ F找到我们须要的那一段代码,如图

  

  

  可以发觉每位标签都有一个新闻标签都是由“Q-tpListInner”的div包上去的,,并且我们要取出的url 在a 标签的href中, 要取的新闻标题在img的alt中,这就是传说的“定锚点、去杂讯”的过程了;

  3.之后就是直接用正则表达式取出我们须要的数据了。

  新闻列表的正则表达式:

  '/Q-tpListInner.*?href="(.*?)".*?alt="(.*?)">/s';

  科技新闻标题的正则表达式:

  '/

  .*?href="(.*?)".*?>(.*?)/s';

  PHP源代码:

  function techNews() {

// PS:PHP的CURL请自行补脑

$url = 'http://tech.qq.com';

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$content = curl_exec($ch);

curl_close($ch);

$content = iconv('gb2312', 'utf-8//IGNORE',$content); //修改字符编码

/*

* 获取腾讯新闻头条

*/

$data = array();

$data_cnt = 0;

$matches = array();

$pattern = '/.*?href="(.*?)".*?>(.*?)/s';

preg_match($pattern, $content, $matches);

$data[$data_cnt]['url'] = $matches[1];

$data[$data_cnt++]['intro'] = $matches[2];

/*

* 获取腾讯新闻列表

*/

$matches = array();

$pattern = '/Q-tpListInner.*?href="(.*?)".*? alt="(.*?)">/s';

preg_match_all($pattern, $content, $matches);

// var_dump($matches);

for ($i = 0; $i < count($matches[1]); $i++) {

$data[$data_cnt]['url'] = $matches[1][$i];

$data[$data_cnt++]['intro'] = $matches[2][$i];

}

var_dump($data);

}

  运行结果截图:

  

  如果出现乱码,转化一下字符编码就行了。

  参考链接:

  [1] 正则表达式30分钟入门教程

  [2] 我眼中的正则表达式(入门)

  [3] 深入正则表达式应用

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线