php多线程抓取多个网页(Python—Queue模块基本使用方法详解(二)编程 )
优采云 发布时间: 2021-12-14 07:10php多线程抓取多个网页(Python—Queue模块基本使用方法详解(二)编程
)
单线程和多线程爬取时间对比
最近听了老师的建议,开始自学多线程爬虫。在开始多线程爬虫实战之前,做了三个准备,写了一篇博文,把准备过程中学到的东西分享给大家。有兴趣的兄弟们。你可以看看。有什么不对的,可以直接私信评论。
Python——多线程编程(一)线程创建、管理、停止
Python——多线程编程(二)线程安全(关键资源问题和多线程同步)
Python-Queue模块基本使用详解
本篇博文实战解析使用多线程爬虫爬取豆瓣电影信息
1.为什么要学会使用多线程进行爬行
之前写的博文和爬虫都是单线程爬虫,代码运行在MainThread下,也就是Python的主线程。但是当爬取的数据量达到一定程度时,单线程爬虫会耗时较长,无法满足大数据的数据时效性要求。这个时间问题的解决方案可以是多线程多进程。等待。爬虫主要的运行时间消耗是请求一个网页时的io阻塞,所以开启多线程,让不同的请求同时等待可以大大提高爬虫的效率。(自己的简单解释)
2. 本次实战使用的模式-生产者、消费者模式(实战分析中详解)
(1)某个模块负责生成数据,这个数据由另一个模块处理(这里的模块是广义的,可以是类、函数、线程、进程等)。
(2) 生成数据的模块形象地称为生产者;处理数据的模块称为消费者。
(3) 仅对生产者和消费者的抽象不足以成为生产者/消费者模型。
(4)这种模式还需要生产者和消费者之间有一个缓冲区,充当中介。
(5) 生产者将数据放入缓冲区,消费者从缓冲区中取数据。
实战分析
1.分析网页源代码并构造请求头(谷歌浏览器)
Python帮助你了解你喜欢的人!爬取她的微博内容信息!(Ajax数据爬取)
(1)网页信息(点击“加载更多”可以看到加载了电影信息,即Ajax动态加载。之前的博文中提到了如何抓取这类信息和抓取分析方法一致)
(2)电影信息源代码所在位置(图片不是很清楚,但可以看出是json数据格式返回的数据,在XHR面板下由Aajx动态加载)
(3)分析构造请求头(可以看到有请求参数,分析可以得到请求页面加载是由page_start参数控制的,每20个是一个页面,我可以通过我自己的爬虫,电影信息应该有384左右,这里以200电影信息为例)