正则表达式的简单应用:使用正则表达式采集腾讯新闻
@H_403_4@正则表达式(Regular Expression)是比较繁琐的,要记的东西比较多,因此我一直都没有腾出时间专门好好研究一下正则表达式,最近网站需要用到PHP的CURL获取腾讯新闻,所以就认真地学了一下正则表达式。正则表达式是非常强大的,学会了正则表达式,在以后的文本匹配中,那是杠杠的。话不多说,进入正题。 @H_403_4@关于正则表达式的一些基础语法,大家可以看一下下面的参考链接,讲解非常到位。 @H_403_4@引用《深入正则表达式应用》的“正则三段论”:定锚点,去噪点,取数据。 @H_403_4@1.首先,我想要从http://tech.qq.com/获取科技新闻头条,以及新闻列表,如图所示。 @H_403_4@@H_403_4@
@H_403_4@2.点击“查看网页源代码”Ctrl+ F找到我们需要的那一段代码,如图 @H_403_4@
@H_403_4@
@H_403_4@可以发现每个标签都有一个新闻标签都是由“Q-tpListInner”的div包起来的,,并且我们要取出的url 在a 标签的href中, 要取的新闻标题在img的alt中,这就是传说的“定锚点、去噪点”的过程了; @H_403_4@3.然后就是直接用正则表达式取出我们需要的数据了。 @H_403_4@新闻列表的正则表达式: @H_403_4@'/Q-tpListInner.*?href="(.*?)".*?alt="(.*?)">/s'; @H_403_4@科技新闻标题的正则表达式: @H_403_4@'/<div class="txt"bosszone="Headlines_tech_1">.*?href="(.*?)".*?>(.*?)<\/a>/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 = '/<div class="txt" bosszone="Headlines_tech_1">.*?href="(.*?)".*?>(.*?)<\/a>/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,$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); }
运行结果截图:
如果出现乱码,转化一下字符编码就行了。