线程、进程
高性能异步爬虫
目的:在爬虫中使用异步实现高性能的数据爬取操作
异步爬虫的方式:
1、多线程,多进程(不建议):
-好处:可以为相关阻塞的操作单独开启线程或者进程,阻塞操作就可以异步执行
-弊端:无法限制的开启多线程或者进程
2、线程池、进程池:
-好处:我们可以降低系统对进程或者线程创建和销毁的一个频率,从而很好的降低系统的开销
-弊端:池中线程或者进程的数量有上限
3、单线程+异步协程(推荐):
event_loop:事件循环,相当于一个无限循环,我们可以把一些函数注册到这个事件循环上,
当满足某些条件的时候,函数就会被循环执行
coroutine:协程对象,我们可以将协程对象注册到事件循环中,它会被事件循环调用,
我们可以使用 async 关键字来定义一个方法,用这个方法在调用时不会立即执行,而是返回
一个协程对象
task:任务,它是协程对象的进一步封装,包含了任务的各个状态
future:代表将来执行或者还没有执行的任务,实际上和 task 没有本质区别
async:定义一个协程
await:用来挂起阻塞方法的执行
import asyncio
async def request( url ):
print( '正在请求的url是' , url )
print( '请求成功' , url )
#async修饰的函数,调用之后返回一个协程对象
c = request( 'www.baidu.com' )
#创建一个事件循环对象
loop = asyncio.get_event_loop( )
#将协程对象注册到loop中,然后启用loop
loop.run_until_complete( c )
#task的使用
loop = asyncio.get_event_loop( )
#基于loop创建一个task对象
task = loop.create_task( c )
print( task )
loop.run_until_complete( task )
print( task )
#future的使用
loop = asyncio.get_event_loop( )
task = asyncio.ensure_future( c )
print( task )
loop.run_until_complete( task )
print( task )
def callback_func( task ):
#result返回的就是任务对象中封装的协程对象对应函数的返回值
print( task.result( ) )
#绑定回调
loop = asyncio.get_event_loop( )
task = asyncio.ensure_future( c )
#将回调函数绑定到任务对象中
task.add_done_callback( callback_func )
loop.run_until_complete( task )
selenium模块使用
selenium模块和爬虫之间具有怎样的关联
--便捷的获取网站中动态加载的数据
--便捷实现模拟登录
什么是selenium模块
--基于浏览器自动化的一个模块
selenium使用流程:
--环境安装: pip install selenium
--下载一个浏览器的驱动程序
--下载路径:
--驱动程序和浏览器的映射关系
--实例化一个浏览器对象
--编写基于浏览器自动化的操作代码
发起请求:get( url )
标签定位:find系列方法
标签交互:send_keys( 'xxx' )
执行js程序:excute_script( 'jsCode' )
前进、后退:back( ) forward( )
关闭浏览器:quit( )
--selenium处理iframe
如果定位的标签存在于iframe标签之中,则必须使用switch_to.frame( id )
动作链(拖动):from selenium.webdriver import ActionChains
-实例化一个动作链对象:action = ActionChains( bro )
-click_and_hold( div ) :长按且点击操作
-move_by_offset( x,y )
-perform( ) 让动作链立即执行
-action.release( ) 释放动作链对象
scrapy框架
什么是框架
--就是一个集成了很多功能并且具有很强通用性的一个项目模板
如何学习框架
--专门学习框架封装的各种功能的详细用法
什么是scrapy
--爬虫中封装好的一个明星框架
scrapy功能:
--高性能的持久化存储,异步的数据下载,高性能的数据分析,分布式
scrapy框架的基本使用
环境安装
--pip install scrapy
windows:
-pip install wheel
-下载twisted
-安装twisted
-pip install pywin32
-pip install scrapy
创建一个工程:scrapy startproject xxxPro
在spiders子目录中创建一个爬虫文件
-scrapy gensplider spiderName www.xxx.com