php Swoole多线程爬虫 二

312 阅读1分钟

「这是我参与2022首次更文挑战的第16天,活动详情查看:2022首次更文挑战

课程背景

  • 我作为一个PHP工程师 虽然这几年PHP没落了
  • 但我还是有责任补充一些PHP方面的高级教程
  • 掘金粑粑开始更文奖励了 不能白白拿人家的奖励
  • 应该发表一些高层次的PHP的技术文章 别让PHP倒了

课程表

数据爬取主要分几个步骤

  • 确定目标网站
  • 爬取网页中的内容
  • 匹配出需要的图片url
  • 下载到本地
  • 进行下一波循环 我们大体先按照这个流程展开我们的讲解

确定目标网站

目标网站https://toutiao.sanhao.com/ 看着列表图片不错,就扒取这些图片 image.png

发送请求

我们使用php一个非常底层的发送请求的包Guzzle

composer require guzzlehttp/guzzle:~6.0

image.png

这样就完成插件安装了。

新建index.php文件 引入vender扩展包

<?php
/**
 * [多线程图片爬取脚本] 
 * Author Liiy. 
 * Date 2022/02/01. 
 * Time 17:21. 
 */

require 'vendor/autoload.php';

分析url

image.png 分析url发现就连接的最后一个数字变化 toutiao.sanhao.com/news-list.p…

于是我们先生成我们需要爬取的链接

$base_url = "https://toutiao.sanhao.com/news-list.php?u=p%s";

//生成目标链接
for ($i=1; $i < 2822; $i++) { 
    echo sprintf($base_url,$i) . "\n";
}

这样我们就生成了需要爬取的连接 image.png

发送请求连接

    $client = new \GuzzleHttp\Client([ 'verify' => false]);
    $response = $client->request('get', $url);
    $body = (string)$response->getBody();
    file_put_contents('a.txt',$body);

此时我们检查a.txt文件的内容发现,就是我们想要的包含图片url的网页内容。

如何从这些内容中提取图片url呢?我们下一章继续讲解。