相关链接:
一、高性能异步爬虫
本章节学习目的:在爬虫中使用异步实现高性能的数据爬取操作。
1.1、
异步爬虫的方式
:
1、多线程,多进程(不建议):
好处:可以为相关阻塞的操作单独开启线程或进程,阻塞操作就可以异步操作执行。
弊端:无法无限制的开启多线程或多进程。
2、线程池、进程池(适当的使用):
好处:我们可以降低系统对进程或线程创建和销毁的频率,从而很好的降低系统的开销。
弊端:池中线程或进程的数量是有上限。
线程池的基本使用
:
步骤1
:导入线程池模块对应的类
:from multiprocessing.dump import Pool (
pool应用到阻塞操作处
)
步骤2
:实例化一个线程池对象
pool
=
Pool
(4)
步骤3
:使用线程池处理这些操作
pool
.map(
get
_page,name_list)(
将列表中每一个列表元素传递给阻塞操作
(get_page)
处理
。
线程池使用基本原则:线程池处理的是阻塞且耗时的操作。
3、
单线程
+
异步协程
(
推荐
)
:
协程相关概念:
event_loop:事件循环,相当于无限循环,我们可以把一些函数注册到这个事件循环上,当满足某些条件的时候,函数就会被循环执行。
coroutine:协程对象,我们可以将协程对象注册到事件循环中,它会被事件循环调用。我们可以使用async关键字来定义一个方法,这个方法在调用时不会立即被执行,而是返回一个协程对象。
task:任务,它是对协程对象的进一步封装,包含了任务的各个状态。
future:代表将来执行或还没有执行的任务,实际上和task没有本质区别。
async:定义一个协程。
await:用来挂起阻塞方法的执行。
在异步协程中,如果出现了同步模块相同的代码
,
那么就无法实现异步
。(request.get是基于同步,必须使用基于异步的网络请求模块进行指定url的请求发送——
aiohttp
:
基于异步网络请求的模块
)
二、动态加载数据处理
2.
1、
selenium模块
selenium模块和爬虫之间的关系:
—便捷的获取网络中动态加载的数据。
—便捷实现模拟登陆
什么是selenium模块?
基于浏览器自动化的一个模块。(浏览器自动化:可以通过编写代码,让代码表示行为动作,让代码操作浏览器,实现浏览器自动化的操作)
selenium使用流程:
—环境安装:pip install selenium
—下载一个浏览器的驱动程(http://chromedriver.storage.googleapis.com/index.html)
—驱动程序和浏览器的映射关系 (https://blog.csdn.net/huilan_same/article/details/51896672)
—实例化一个浏览器对象
—编写基于浏览器自动化的操作代码
2.2、
seleium其他自动化操作
发起请求:get(url)
标签定位:find系列方法
标签交互:send_keys(‘xxx’)
执行js程序:excute_script(‘jsCode’)
前进,后退:back(),forward()
关闭浏览器:quit()
2.
3、
selenium处理iframe
如果定位的标签是存在于iframe标签之中的则必须通过如下操作进行标签定位:
bro.
switch_to.frame(‘iframeReuslt’)
# 切换浏览器标签定位的作用域
动作链(拖动):
from
selenium
.webrive import ActionChains(
导入动作链对应的类
)
—实例化一个动作链对象:action = ActionChains(bro)
—click_and_hild(div) :长按且点击操作
—move_by_offset(x,y)
—perform()让动作链立即执行
—action.release() 释放动作链对象