使用php preg_match_all&cURL从多个页面中抓取/下载图像
发布时间:2020-12-13 17:09:12 所属栏目:PHP教程 来源:网络整理
导读:所以我试图从另一个网站抓取一些图像,问题是每个图像都在不同的页面上 IE:id / 1,id / 2,id / 3等等 到目前为止,我有下面的代码,可以从使用下面给出的单个URL获取图像: $returned_content = get_data('http://somedomain.com/id/1/'); 但需要让上面的一行
所以我试图从另一个网站抓取一些图像,问题是每个图像都在不同的页面上
IE:id / 1,id / 2,id / 3等等 到目前为止,我有下面的代码,可以从使用下面给出的单个URL获取图像: $returned_content = get_data('http://somedomain.com/id/1/'); 但需要让上面的一行成为一个数组(我猜)所以它将从第1页抓取图像,然后继续抓住第2页上的下一个图像,然后是第3页等等 function get_data($url){ $ch = curl_init(); $timeout = 5; curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout); curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); $data = curl_exec($ch); curl_close($ch); return $data; } $returned_content = get_data('http://somedomain.com/id/1/'); if (preg_match_all("~http://somedomain.com/images/(.*?).jpg~i",$returned_content,$matches)) { $src = 0; foreach ($matches[1] as $key) { if(++$src > 1) break; $out = $key; } $file = 'http://somedomain.com/images/' . $out . '.jpg'; $dir = 'photos'; $imgurl = get_data($file); file_put_contents($dir . '/' . $out . '.jpg',$imgurl); echo 'done'; } 一如既往,所有的帮助都表示赞赏,并提前感谢. 解决方法
这非常令人困惑,因为听起来你只对每页保存一个图像感兴趣.但是代码使得它看起来像是在尝试保存每个页面上的每个图像.所以我完全有可能完全误解了……但是这里有.
在每个页面上循环并不困难: $i = 1; $l = 101; while ($i < $l) { $html = get_data('http://somedomain.com/id/'.$i.'/'); getImages($html); $i += 1; } 以下假设您尝试保存该特定页面上的所有图像: function getImages($html) { $matches = array(); $regex = '~http://somedomain.com/images/(.*?).jpg~i'; preg_match_all($regex,$html,$matches); foreach ($matches[1] as $img) { saveImg($img); } } function saveImg($name) { $url = 'http://somedomain.com/images/'.$name.'.jpg'; $data = get_data($url); file_put_contents('photos/'.$name.'.jpg',$data); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |