正则表达式的简单应用:使用正则表达式采集腾讯新闻
优采云 发布时间: 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] 深入正则表达式应用