爬虫抓取网页数据( 前端基础比较扎实的Css选择器教程)
优采云 发布时间: 2022-02-27 20:08爬虫抓取网页数据(
前端基础比较扎实的Css选择器教程)
2、解析数据
爬虫爬取的是爬取页面指定的部分数据值,而不是整个页面的数据。这时候,往往需要先解析数据,再存储。
网络上采集返回的数据的数据类型很多,主要有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的速度比较快,但是写正则表达式比较麻烦。当然,既然用的是python,那最好还是自己用。
推荐的解析器资源:
查询
美汤
xpath 教程
重新记录
3、数据存储
当爬回来的数据量较小时,可以以文档的形式存储,支持TXT、json、csv等格式。
但是当数据量变大时,文档的存储方式就行不通了,所以需要掌握一个数据库。
Mysql作为关系型数据库的代表,系统比较成熟,成熟度很高。它可以很好地存储一些数据。但是在处理海量数据时,效率会明显变慢,已经不能满足一些大数据的需求。处理请求。
MongoDB 已经流行了很长时间。与 MySQL 相比,MongoDB 可以方便你存储一些非结构化的数据,比如各种评论的文本、图片的链接等。你也可以使用 PyMongo 更方便地在 Python 中操作 MongoDB。因为这里用到的数据库知识其实很简单,主要是如何存储和提取数据,需要的时候学。
**Redis是不折不扣的内存数据库,**Redis支持丰富的数据结构,包括hash、set、list等。所有数据都存储在内存中,访问速度快,可以存储大量数据. 一般用于分布式爬虫的数据存储。
工程爬行动物
如果掌握了前面的技术,就可以实现一个轻量级的爬虫,一般级的数据和代码基本没有问题。
但面对复杂的情况,表现却不尽如人意。这时候,一个强大的爬虫框架就非常有用了。
首先是 Nutch,著名的 Apache 顶级项目,它提供了我们运行自己的搜索引擎所需的所有工具。
支持分布式爬取,具有Hadoop对多机分布式爬取、存储和索引的支持。
另一个很吸引人的地方是它提供了一个插件框架,可以很方便的扩展解析各种网页内容、采集、查询、聚类、过滤各种数据的功能。
二是GitHub上大家star的scrapy,scratch是一个非常强大的爬虫框架。
它不仅可以轻松构建请求,还具有强大的选择器,可以轻松解析响应。然而,最令人惊讶的是它的超高性能,它可以让你对爬虫进行工程化和模块化。
学习scrapy,可以自己搭建一些爬虫框架,基本具备爬虫工程师的思维。
最后,Pyspider作为国内大神们开发的框架,满足了大部分Python爬虫的需求——定向爬取和结构化分析。
可以在浏览器界面进行脚本编写、函数调度和爬取结果的实时查看,后端使用常用数据库存储爬取结果。
它足够强大,更像是一个产品而不是一个框架。
这是三个最具代表性的爬虫框架。它们都有着远远优于其他的优势,比如**Nutch的自然搜索引擎解决方案,Pyspider的产品级WebUI,以及Scrapy最灵活的定制化爬虫。**建议学习最接近爬虫本质的框架scarry,然后接触为搜索引擎而生的人性化Pyspider和Nutch。
推荐爬虫框架资源:
Nutch 文档
可怕的文档
pyspider 文档
反爬虫对策
爬虫就像虫子,密密麻麻地爬到各个角落获取数据,虫子可能无害,但总是不受欢迎。
由于爬虫技术导致的大量IP访问网站,对带宽资源的侵占,以及对用户隐私和知识产权的危害,很多互联网公司将大力开展“反爬虫”。
你的爬虫会遇到比如被网站IP屏蔽,比如各种奇怪的验证码,userAgent访问限制,各种动态加载等等。
常见的反爬虫措施包括:
·通过Headers反爬虫
·基于用户行为的反爬虫
·基于动态页面的反爬虫
·字体防爬…
遇到这些反爬手段,当然需要一些高级技巧来应对。控制访问频率,保证页面加载一次,数据请求最小化,每次页面访问增加时间间隔;禁用 cookie 可以防止使用 cookie 识别爬虫 网站 来禁止我们的可能性;根据浏览器正常访问的请求头修改爬虫的请求头,尽量与浏览器保持一致等。
往往网站会在高效开发和反爬虫之间偏爱前者,这也为爬虫提供了空间。掌握了这些反爬技能,大部分网站对你来说都不再难了。
分布式爬虫
爬取基础数据没有问题,也可以用框架写更复杂的数据。这时候就算遇到反爬,你也掌握了一些反反爬的技巧。
你的瓶颈将是爬取海量数据的效率。这个时候,相信大家自然会接触到一个很厉害的名字:分布式爬虫。
分布式的东西听起来很吓人,但其实它是利用多线程的原理组合多台主机完成一个爬虫任务**,需要掌握Scrapy + Redis + MQ + Celery**等工具**。
之前我们说过,Scrapy是用来做基础页面爬取的,Redis是用来存放待爬取网页的队列,也就是任务队列。
Scarpy-redis是scrapy中用来实现分布式组件的组件,通过它可以快速实现一个简单的分布式爬虫程序。
在高并发环境中,请求经常因为没有时间进行同步处理而被阻塞。通过使用消息队列MQ,我们可以异步处理请求,从而减轻系统压力。
RabbitMQ 本身支持多种协议:AMQP、XMPP、SMTP、STOMP,使其非常重量级,更适合企业级开发。
Scrapy-rabbitmq-link 是一个组件,它允许您从 RabbitMQ 消息队列中获取 URL 并将它们分发给 Scrapy 蜘蛛。
Celery 是一个简单、灵活、可靠的分布式系统,用于处理大量消息。它支持RabbitMQ、Redis甚至其他数据库系统作为其消息代理中间件,在异步任务、任务调度、定时任务、分布式调度等场景中表现出色。
所以分布式爬虫听起来很吓人,但就是这样。当你能写出分布式爬虫的时候,就可以尝试搭建一些基本的爬虫架构,实现一些更自动化的数据获取。
推荐的分布式资源:
scrapy-redis 文档
scrapy-rabbitmq 文档
芹菜文档
你看,沿着这条完整的学习路径走下去,爬虫对你来说根本不是问题。
因为爬虫技术不需要你系统地精通一门语言,也不需要高级的数据库技术。
解锁各部分的知识点,有针对性地学习。经过这条顺利的学习路径,您将能够掌握python爬虫。
但是,要学习爬虫,需要打好基础。在这里,我为大家准备了一份零基础学习的Python学习资料。有兴趣的同学可以看看。