php多线程抓取多个网页(php多线程抓取多个网页的爬虫抓取思路分析(图))

优采云 发布时间: 2021-10-03 12:03

  php多线程抓取多个网页(php多线程抓取多个网页的爬虫抓取思路分析(图))

  php多线程抓取多个网页是一种非常简单的方法,但是这种方法非常简单,如果同时抓取几个网页或者抓取任意网页分裂出来很多个网页会影响速度,那么有没有可以不同时抓取多个网页的爬虫呢?有,答案就是多进程爬虫抓取。主要思想就是在分配一个进程池给程序调用的同时,网页又分配两个池子分别进行抓取,如下所示,是在两个进程中抓取一个相同的网页内容。

  使用是非常方便的,每次只需要一次分配进程池给代码抓取,用户只需要点击回调函数做事件处理和逻辑处理即可。给爬虫找个队列进程池抽象成队列,可以看做是一个延时任务,如果网页要等待我们执行完一个任务才显示返回结果,那么就把任务放入队列,等候队列的执行完毕后再显示出结果,这样就可以重复多次完成任务。对队列中的任务分别进行多线程调用就可以实现很多事情了。

  实现思路先定义一个队列,进程池代码,基本情况图如下:从网页内容可以定义到getsitemap函数,getsitemap函数返回网页的图片地址和位置,接着定义gethtml函数,图片地址返回url,一般我们使用的图片都是通过爬虫抓取下来的图片,那么这个网页如果存在图片地址就返回以图片地址为loader对象的posthtml函数,返回url和图片地址。

  然后进行gethtml函数的分发,分配给两个队列对应的两个池子每次分配一个进程池完成抓取数个网页,每个进程池同时抓取整个网页。最后用户在使用gethtml函数点击回调函数,取到返回的结果设置队列index进程,队列内的队列每次只抓取一个网页,然后取出队列内的网页连同图片地址传递给gethtml函数从而显示出结果。

  php多线程抓取多个网页大致思路就是这样,整个流程主要涉及的函数如下:定义好队列池,通过特定的api不断放入队列中,在我们进行队列的同时对着api返回的网页执行posthtml函数,在对应的队列中的队列直接传递进行抓取,抓取完成队列放入队列池,然后等待队列中队列放入队列池里的网页结果,再由队列的index函数返回,而队列内的队列每次只抓取一个网页,整个抓取的过程对应主要使用gethtml的实现,这里写的直接是队列gethtml函数posthtml函数gethtml函数的参数:返回地址url队列index函数参数ex1的输入和输出是同步的,为了减少中间的数据传递耗时,我们直接通过回调函数loadex函数来取数。

  posthtml函数的实现流程是定义gethtml函数,通过loadex获取了队列,然后调用gethtml函数,调用gethtml函数的时候在队列中拷贝了图片地址,通过网页回调函数posthtml函数loadcurrenttext函数读取了网页地址,然后返回url的二进制字符串到。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线