Python爬虫—高性能异步爬虫、动态加载数据处理

  • Post author:
  • Post category:python


相关链接:

一、高性能异步爬虫


本章节学习目的:在爬虫中使用异步实现高性能的数据爬取操作。



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() 释放动作链对象



版权声明:本文为beiye_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。