php抓取网页数据插入数据库(页面抓取,我只用过两种,一种是file_get_contents)
优采云 发布时间: 2021-09-30 12:11php抓取网页数据插入数据库(页面抓取,我只用过两种,一种是file_get_contents)
页面爬取,我只用过两种,一种是file_get_contents,直接从网页中获取数据,但是有些网站会禁止这个功能,所以还有一个方法,Curl。
我们要先获取页面的数据。这时候我们需要先使用file_get_contents函数来获取页面的所有数据:
$url = 'https://blog.csdn.net/zph1234/rss/list';
$file=file_get_contents("compress.zlib://".$url);
抓取页面时可能会出现乱码,所以第二行代码中的compress.zlib很重要,因为获取到的头信息中收录Encoding:gzip,表示内容是GZIP压缩的
接下来,我写了一个规则来匹配页面上的元素,从而实现对页面数据的抓取:
$preg='#.*#isU';
preg_match_all($preg,$file,$arr);
preg_match_all 这个函数用于进行全局正则表达式匹配,过滤掉我需要的数据。我要删除的数据是我老师的博客。内容有标题、内容、时间、阅读量等,所以需要循环获取
代码显示如下
$pat1='#(.*)#isU';
$pat2='#阅读:([1-9]\d*+).*#isU';
$pat3='#(.*)#isU';
$pat4='#(.*)#isU';
foreach ($arr as $key => $v)
{ //二维数组[2]对应id和[1]刚好一样,利用起key
foreach($v as $k => $value)
{
preg_match($pat1, $v[$k], $arr_title);
preg_match($pat2, $v[$k], $arr_con);
preg_match($pat3, $v[$k], $arr_time);
preg_match($pat4, $v[$k], $arr_url);
$arr2['title'][] = addslashes( htmlspecialchars ($arr_title[1]));
$arr2['content'][] = addslashes( htmlspecialchars ($arr_con[1]));
$arr2['ctime'][] = $arr_time[1];
$arr2['url'][] = $arr_url[1];
}
// var_dump($arr2);exit;
}
将这些数据处理成我想要的数组,实现代码如下:
foreach ($arr2 as $key => $val)
{
foreach ($val as $k => $v)
{
$arr_new[$k][$key]=$v;
}
}
只需在循环中将处理过的数组添加到数据库中;