高性能异步爬虫概述_学习总结

python爬虫结课了,最后的高性能爬虫方案

代理:避开IP这种反扒机制

    什么是代理
            代理服务器

    代理的作用
            突破自身IP访问限制
            隐藏自身真实IP

    代理IP的类型
            http:应用到http协议对应的url中 proxies ={‘协议’:‘ip:端口号’}
            https:应用到https协议对应的url中

    代理IP的匿名度:
            透明:服务器知道该请求使用了代理,也知道请求对应的真实IP
            匿名:知道使用了代理,不知道真实IP
            高匿:不知道使用了代理,更不知道真实的IP

    高性能异步爬虫:
            目的:在爬虫中使用异步实现高性能的数据爬取操作

    异步爬虫的方式:
            多线程/多进程:(不建议)
                    好处:可以为相关阻塞的操作单独开启线程或进程,阻塞操作就可以异步执行。
                    弊端:无法无限制的开启多线程或多进程。

            线程池/进程池:(适当使用)
                    好处:我们可以降低系统对进程或线程的创建和销毁的一个频率,从而很好的降低系统的开销。
                    弊端:池中线程或进程的数量是有上限的。

                    导入线程池模块对应的类:from multiprocessing import pool
                    实例化一个线程池对象:pool = pool(n) n:线程池中线程数
                    线程池的使用:pool.map(阻塞操作,可迭代对象)
                    使用原则:线程池处理的是阻塞且较为耗时的操作

            单线程+异步协程(推荐)
                    event_loop事件循环,相当于一个无限循环,我们可以把一些函数注册到这个事件循环上,当满足某些条件的时候,函数就会被循环执行
                    coroutine协程对象,我们可以将协程对象注册到循环事件中,它会被事件循环调用
                    我们可以使用 async 关键字来定义一个方法,这个方法在调用时不会立即执行,而是返回一个协程对象

task:任务,它是对协程对象的进一步封装,包含了任务的各个状态
future:代表将来执行会还没执行的任务,实际上和 task 没有本质区别
async:定义一个协程
await: 用来挂起阻塞方法的执行

异步请求(aiohttp)

        环境安装:pip install aiohttp
        使用该模块中的ClientSession

使用aiohttp请求代替requests请求

用法
        async with aiohttp.ClientSession() as session:
        get()/post():
        headers,params/data,proxy=‘http://ip:port’
        async with await session.get(url) as response:
        text() 返回字符串形式的响应数据
        read() 返回二进制形式的响应数据
        json() 返回的就是json对象

注意:获取相应数据操作之前一定要使用await进行手动挂起
page_text = await response.text()

发布了48 篇原创文章 · 获赞 55 · 访问量 4477

猜你喜欢

转载自blog.csdn.net/qq_43562262/article/details/104645533
今日推荐