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

猜你喜欢

转载自blog.csdn.net/beiye_/article/details/126624894
今日推荐