例如我要采集这个url里的所有美国电影的信息,
http://list.youku.com/category/show/c_96_a_%E7%BE%8E%E5%9B%BD_s_1_d_1_p_3.html
public function index()
{
$url ='https://list.youku.com/category/show/c_96_a_%E7%BE%8E%E5%9B%BD_s_1_d_1_p_3.html';
$data = $this->get($url);
// 匹配电影所在位置
$list_preg = '/<li class="yk-col4 mr1">.+<\/li>/Us';
// 匹配img标签上的src和alt
$img_preg = '/<img class="quic" _src="(.*)" src="(.*)" alt="(.*)" \/>/U';
//匹配电影的url
$video_preg = '/<a href="(.*)" title="(.*)" target="(.*)"><\/a>/U';
//把所有的li存到$list里,$list是个二维数组
preg_match_all($list_preg, $data, $list);
foreach ($list[0] as $k => $v) { //这里$v就是每一个li标签
//获取图片及电影名称
/*preg_match($img_preg,$v,$img); //把匹配到的图片的信息存到$img里
var_dump($img);*/
//获取电影地址
/* preg_match($video_preg,$v,$video); //把匹配到的电影的信息存到$video里
var_dump($video);*/
preg_match($img_preg, $v, $img);
preg_match($video_preg, $v, $video);
echo $img[0] . '<a href="' . $video[1] . '">' . $video[2] . '</a>';
}
}
public function get($url)
{
$curl = curl_init();
// 配置curl中的http协议->可配置的荐可以查PHP手册中的curl_
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_HEADER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
// 执行这个请求
return curl_exec($curl);
}
最终效果
如果需要把图片拷贝到硬盘上,则在foreach循环里加上以下代码:
$imgData = $this->get($img[1]);
// 把图片文件写到硬盘上【下载】
// 因为操作系统是GBK的,所以要把UTF8转成GBK
is_dir('./youkuimg/') ? '': mkdir('./youkuimg/');
file_put_contents('./youkuimg/'.mb_convert_encoding($img[3], 'gbk', 'utf-8').'.jpg', $imgData);
完整代码
public function index()
{
// 生成一个curl对象
// $url = 'http://list.youku.com/category/show/c_96_a_%E7%BE%8E%E5%9B%BD_s_1_d_1_p_3.html';
$url ='https://list.youku.com/category/show/c_96_a_%E7%BE%8E%E5%9B%BD_s_1_d_1_p_3.html';
$data = $this->get($url);
// 匹配电影所在位置
$list_preg = '/<li class="yk-col4 mr1">.+<\/li>/Us';
// 匹配img标签上的src和alt
$img_preg = '/<img class="quic" _src="(.*)" src="(.*)" alt="(.*)" \/>/U';
//匹配电影的url
$video_preg = '/<a href="(.*)" title="(.*)" target="(.*)"><\/a>/U';
//把所有的li存到$list里,$list是个二维数组
preg_match_all($list_preg, $data, $list);
foreach ($list[0] as $k => $v) { //这里$v就是每一个li标签
//获取图片及电影名称
/*preg_match($img_preg,$v,$img); //把匹配到的图片的信息存到$img里
var_dump($img);*/
//获取电影地址
/* preg_match($video_preg,$v,$video); //把匹配到的电影的信息存到$video里
var_dump($video);*/
preg_match($img_preg, $v, $img);
preg_match($video_preg, $v, $video);
echo $img[0] . '<a href="' . $video[1] . '">' . $video[2] . '</a>';
$imgData = $this->get($img[1]);
// 把图片文件写到硬盘上【下载】
// 因为操作系统是GBK的,所以要把UTF8转成GBK
is_dir('./youkuimg/') ? '': mkdir('./youkuimg/');
file_put_contents('./youkuimg/'.mb_convert_encoding($img[3], 'gbk', 'utf-8').'.jpg', $imgData);
}
}
public function get($url)
{
$curl = curl_init();
// 配置curl中的http协议->可配置的荐可以查PHP手册中的curl_
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_HEADER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
// 执行这个请求
return curl_exec($curl);
}
效果如下:在当前目录下的youkuimg目录下就会有下载好的图片。