爬虫抓取网页数据( Python标准库中的应用方法-苏州安嘉 )
优采云 发布时间: 2021-11-13 12:07爬虫抓取网页数据(
Python标准库中的应用方法-苏州安嘉
)
2、分析数据
爬虫爬取的是页面的指定部分数据值,而不是整个页面的数据。这时候,往往需要在存储之前对数据进行分析。
web返回的数据类型很多,主要有HTML、javascript、JSON、XML等格式。解析库的使用相当于在HTML中搜索需要的信息时使用了规律性,可以更快速的定位到具体的元素,获得相应的信息。
Css 选择器是一种快速定位元素的方法。
Pyqurrey 使用 lxml 解析器快速操作 xml 和 html 文档。它提供了类似于jQuery的语法来解析HTML文档,支持CSS选择器,使用起来非常方便。
Beautiful Soup 是一种借助网页的结构和属性等特征来解析网页的工具,可以自动转换编码。支持Python标准库中的HTML解析器,也支持部分第三方解析器。
Xpath 最初用于搜索 XML 文档,但它也适用于搜索 HTML 文档。它提供了 100 多个内置函数。这些函数用于字符串值、数值、日期和时间比较、节点和QName 处理、序列处理、逻辑值等,XQuery 和XPointer 都建立在XPath 之上。
Re正则表达式通常用于检索和替换符合某种模式(规则)的文本。个人认为前端基础比较扎实,pyquery最方便,beautifulsoup也不错,re速度比较快,但是写regular比较麻烦。当然,既然你用的是python,那绝对是为了你自己的方便。
推荐的解析器资源:
pyquery /1EwUKsEG
Beautifulsoupt.im/ddfv
xpath 教程 t.im/ddg2
重新文件 t.im/ddg6
3、数据存储
当爬回的数据量较小时,可以以文档的形式存储,支持TXT、json、csv等格式。
但是当数据量变大时,文档的存储方式就不行了,所以需要掌握一个数据库。
Mysql作为关系型数据库的代表,有着较为成熟的系统,成熟度较高。可以很好的存储一些数据,但是处理海量数据时效率会明显变慢,已经不能满足一些大数据的需求。加工要求。
MongoDB 已经流行了很长时间。与 MySQL 相比,MongoDB 可以轻松存储一些非结构化数据,例如各种评论的文本、图片链接等。您还可以使用 PyMongo 更轻松地在 Python 中操作 MongoDB。因为这里要用到的数据库知识其实很简单,主要是如何存储数据,如何提取,需要的时候学习。
Redis 是一个不妥协的内存数据库。Redis支持丰富的数据结构,包括hash、set、list等,数据全部存储在内存中,访问速度快,可以存储大量数据,一般用于分布式的数据存储爬虫。
工程履带
通过掌握前面的技术,可以实现轻量级爬虫,一般量级的数据和代码基本没有问题。
但在面对复杂情况时,表现并不令人满意。这时候,一个强大的爬虫框架就非常有用了。
第一个是 Nutch,来自一个著名家族的顶级 Apache 项目,它提供了我们运行自己的搜索引擎所需的所有工具。
支持分布式爬取,通过Hadoop支持,可以进行多机分布式爬取、存储和索引。
另一个非常吸引人的地方是它提供了一个插件框架,可以方便的扩展各种网页内容分析、各种数据采集、查询、聚类、过滤等功能。
接下来是GitHub上大家star的scrapy,sear是一个非常强大的爬虫框架。
它不仅可以轻松构造请求,还具有强大的选择器,可以轻松解析响应。然而,最令人惊讶的是它的超高性能,它可以让你对爬虫进行工程化和模块化。
学习了scrapy之后就可以自己搭建一些爬虫框架了,基本就具备爬虫工程师的思维了。
最后,Pyspider作为国内大神开发的框架,满足了大部分Python爬虫的针对性爬取和结构化分析的需求。
可以在浏览器界面进行脚本编写、函数调度、实时查看爬取结果,后端使用常用数据库存储爬取结果。
它的功能是如此强大,以至于它更像是一个产品而不是一个框架。
这是三个最具代表性的爬虫框架。它们都有着远超其他的优势,比如Nutch的自然搜索引擎解决方案,Pyspider产品级的WebUI,以及Scrapy最灵活的定制爬取。建议先从最接近爬虫本质的可怕框架入手,然后接触为搜索引擎而生的人性化的Pyspider和Nutch。
推荐的爬虫框架资源:
纳奇文件/
可怕的文件/
pyspider 文档 t.im/ddgj
防爬虫对策
爬虫就像一个虫子,密密麻麻地爬到每一个角落获取数据。这个错误可能是无害的,但它总是不受欢迎的。
由于爬虫技术网站对带宽资源的侵犯导致大量IP访问,以及用户隐私和知识产权等危害,很多互联网公司都会下大力气“反爬虫”。
你的爬虫会遇到比如被网站拦截,比如各种奇怪的验证码、userAgent访问限制、各种动态加载等等。
常见的反爬虫措施有:
·通过Headers反爬虫
·基于用户行为的反爬虫
·基于动态页面的反爬虫
·字体爬取.....
遇到这些反爬虫方法,当然需要一些高深的技巧来应对。尽量控制访问频率,保证页面加载一次,数据请求最小化,增加每次页面访问的时间间隔;禁止 cookie 可以防止使用 cookie 来识别爬虫。网站 禁止我们;根据浏览器正常访问的请求头,修改爬虫的请求头,尽量与浏览器保持一致,以此类推。
经常网站在高效开发和反爬虫之间偏向于前者。这也为爬虫提供了空间。掌握这些反爬虫技巧,大部分网站对你来说不再难。
分布式爬虫
爬取基础数据没有问题,也可以用框架来面对更复杂的数据。这时候,就算遇到了防爬,也已经掌握了一些防爬的技巧。
你的瓶颈将集中在爬取大量数据的效率上。这时候,相信你自然会接触到一个非常强大的名字:分布式爬虫。
分布式这个东西听上去很吓人,其实就是利用多线程的原理,将多台主机结合起来,共同完成一个爬虫任务。需要掌握Scrapy+Redis+MQ+Celery等工具。
前面说过,Scrapy是用来做基础的页面爬取,Redis用来存放要爬取的网页的队列,也就是任务队列。
在scrapy中使用scarpy-redis实现分布式组件,通过它可以快速实现简单的分布式爬虫。
由于高并发环境,请求经常被阻塞,因为来不及同步处理。通过使用消息队列MQ,我们可以异步处理请求,从而减轻系统压力。
RabbitMQ本身支持很多协议:AMQP、XMPP、SMTP、STOMP,这使得它非常重量级,更适合企业级开发。
Scrapy-rabbitmq-link 是一个组件,它允许您从 RabbitMQ 消息队列中检索 URL 并将它们分发给 Scrapy 蜘蛛。
Celery 是一个简单、灵活、可靠的分布式系统,可以处理大量消息。它支持RabbitMQ、Redis甚至其他数据库系统作为其消息代理中间件,在处理异步任务、任务调度、处理定时任务、分布式调度等场景中表现良好。
所以分布式爬虫听起来有点吓人,但仅此而已。当你能写出分布式爬虫,那么你就可以尝试搭建一些基本的爬虫架构来实现一些更加自动化的数据采集。
推荐的分布式资源:
scrapy-redis 文档 t.im/ddgk
scrapy-rabbitmq 文档 t.im/ddgn
芹菜文件 t.im/ddgr
你看,沿着这条完整的学习路径走下去,爬虫对你来说根本不是问题。
因为爬虫技术不需要你系统地精通一门语言,也不需要非常先进的数据库技术。
解锁各部分知识点,有针对性地学习。经过这条顺利的学习路径,你将能够掌握python爬虫。
以上知识框架已经完整打包,包括超清图片、PDF文档、思维导图文件、python爬虫相关资料。您可以点击下方卡片添加微信领取。