美文网首页
python爬虫常识

python爬虫常识

作者: 王文强Python | 来源:发表于2020-07-04 23:12 被阅读0次

    一、简述
    aiohttp、Scrapy、ScrapyRedis、Requests、Selenium 五个爬虫框架都各有各的好处,具体要根据项目需求来选择到底使用哪一个,我从以下几个方面介绍一下:五个框架各自的特点和场景、控制台分析请求和响应、解决登陆问题、数据解析、使用多线程、多进程多线程、gevent线程池、协程 的特点、使用场景和方法。

    二、四个框架各自的特点和场景
    1、aiohttp是一个异步爬虫框架,需要配合async编写异步代码来完成异步爬虫速度非常快。cpu只要是空闲着就会创建新的协程向外发送请求,在内存中每个协程都会单独创建一个寄存器空间记录下请求和response响应。从服务器返回的响应是无序的,但是响应都会放到每个协程对应的寄存器空间内,然后代码会切换回来对这个空间内的数据做解析存储等操作,当有新的寄存器收到响应后代码再切换回来继续运行。相当于在一个主线程中开辟了多个寄存器空间,每个寄存器空间里面都装着一份代码、请求、响应、解析、存储.......,请求和响应之间是有间隔时间的这个时候cpu是空闲的,在这期间只要有响应回来cpu就会进行计算,遇到IO操作时只要有响应回来cpu就会切换到另外一个协程中计算。
    2、Scrapy异步网络框架 是用yield 实现异步编程 架构虽然老了,但是速度非常快,你只需要完成【spiders爬虫文件中的 url和数据解析代码】和【itempipeline管道中的文件和数据存储代码】。遇到特殊情况需要处理时可以在 Middleware 中间键中做切面编程,例如:使用selenium破解登陆存储cookie,请求头中添加Cookie、IP、User-Agent、加密数据做解密、、、,在爬取一些大型网站时选择这个框架是最明智的选择,异步框架都你写好了你只要完成几步操作就能实现非常的快速抓取到想要的数据。
    3、ScrapyRedis分布式异步网络框架,这个框架速度更快,通过redis进行交互多台服务器同时异步爬取数据,引擎将url都丢到redis的集合中,Scrapy的调度器去redis的集合中去取url,与Scrapy一样各自接收到响应后在spiders中解析和和url,itempipeline中存储数据,Middleware 做切面编程。在抓一些限速的大型网站中用ScrapyRedis最合适不过了。
    4、Requests是一个轻量级的爬虫框架,单进程单线程速度比较慢,配合多线程之后速度可以提高3倍多,如果配合多进程多线后速度可以提高10倍左右,还有gevent线程池是ython的一个第三方库, 但速度还是比上面三个框架要慢,,,可以添加params、headers请求头和data请求体,所有抓取过程、数据解析、存储逻辑都要自己写,一般用于配合项目完成某些功能 和 一些 脚本当中。
    5、selenium速度非常慢,可以完全模拟人的操作打开网页,去html静态文件中解析数据,当遇到一些难以解密的动态加密数据时采用selenium,还有就是遇到一些短信验证码、滑块、点文字、加减乘除、选择图片、翻转图片等登陆操作时可以使用selenium把登陆页面拉起手动完成验证码,登陆成功后再将cookie保存到文件中,下次请求时就可以拼接到请求头中使用上面四个中任何一个框架速度都要比selenium快很多。

    二、控制台分析请求和响应(有好的文章欢迎投稿补充)
    1 、请求首行
    2 、请求头
    3 、请求体
    4 、响应首行
    5 、响应头
    6 、响应体
    7 、cookie(和拼接cookie)
    8 、Preserve log 和 Search
    9 、分析 js 代码对加密数据做解密
    10、携带加密后的明文密码登陆

    相关文章

      网友评论

          本文标题:python爬虫常识

          本文链接:https://www.haomeiwen.com/subject/nuspqktx.html