2018-11-21
网络爬虫涉及到的技术相关知识点很多,这里面我们罗列了一些基本的相关知识,以便我们逐个击破。下面是一张关于爬虫的知识结构图:
爬虫技术相关知识获取网页技术,一般是通过一门语言来实现的。不管是C、C++、java、.net还是python都有自己的web通信库。我们讨论的则是关于python语言的爬虫工具。
最常用的三个python爬虫库
1、urllib库
python内置的http访问库,这个库我平时用的相对较少,一般用于爬虫系统中的某个功能实现校验使用,原因是可以通过更简单易用的requests替代它。
urllib2、requests库
requests是python实现的简单易用的HTTP库,使用起来比urllib简洁很多,脚本型的爬虫绝大多数使用这个库实现。
Requests3、aiohttp库
相比requests的阻塞式HTTP请求库,aiohttp是一个提供异步web服务的库(如果把requests想象成串行执行,那么aiohttp则是并行执行),asyncio可以实现单线程并发IO操作,通过aiohttp库实现的爬虫,运行效率高。
2018-11-21最常用的三个python爬虫框架
4、Scrapy框架
Scrapy是一个为爬虫而生的应用框架,他的主要作用是提取结构性数据。支持异步网络通讯,Scrapy需要遵循他的爬虫编写规范,需要花费时间成本熟悉框架结构和规则。Scrapy真的很强大。
Scrapy5、Selenium框架
Selenium准确的将是用于做自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬。对于一些JavaScript动态渲染的页面来说,此种抓取方式非常有效。缺点就是爬虫的运行效率不高。
Selenium6、Splash框架
Splash是一个JavaScript渲染服务,是一个带有HTTP API的轻量级浏览器,同时它对接了Python中的Twisted和QT库。利用它,我们同样可以实现动态渲染页面的抓取。
Splash附:框架与类库的区别主要表现在以下几个方面:
1、从结构上说,框架内部是高内聚的,而类库内部则是相对松散的。
2、框架封装了处理流程的控制逻辑,而类库几乎不涉及任何处理流程和控制逻辑。
3、框架具有IOC(控制反转)能力,而类库没有。
4、框架专注于特定领域,而类库却是更通用的。
5、框架通常建立在众多类库的基础之上,而类库一般不会依赖于某框架。