「这是我参与2022首次更文挑战的第19天,活动详情查看:2022首次更文挑战」
课程背景
- 我作为一个PHP工程师 虽然这几年PHP没落了
- 但我还是有责任补充一些PHP方面的高级教程
- 掘金粑粑开始更文奖励了 不能白白拿人家的奖励
应该发表一些高层次的PHP的技术文章别让PHP倒了
正文开始
上面的章节中,我们匹配出了数据。并在php中解析了Dom。在dom中能根据我们写的Xpath规则查询到图片的url连接。
1 查看匹配到的url连接
打印一下匹配到的图片连接
2 根据图片连接,保存图片 还是用Guzzle库对图片进行保存操作。因为上面我们已经创建了client,所以下面可以直接的使用它再次请求图片即可。为了防止图片重名覆盖,我们在图片的名称上加了随机数。
$url_path = 'http:'.$pic_url;
$file_name_arr = explode('/',$url_path);
$file_name =$file_name_arr[array_key_last($file_name_arr)];
$file_name = mt_rand(1000, 9999).'_'.$file_name;
$res_pic = $client->request('get', $url_path, ['sink' => './img/' . $file_name]);
echo sprintf("图片%s存储结果:%s",$file_name,$res_pic->getStatusCode()).PHP_EOL;
循环一次,发现第一页的图片都被保存成功了。我们去文件目录中去查看图片文件。
图片大小正常,并且图片没有损坏能正常打开,而且是第一页中匹配到的图片。说明我们的图片爬取的流程是没有问题的。
此时我们将break断点去掉,让单线程的php去爬取图片。可以看到图片正常被抓取到了。但是效果很好,速度却不是很快。因为需要一次一次的发送请求。只有一个线程在工作。对于大数据的爬取需求,速度是接受不了的。