js 爬虫抓取网页数据(Python400集_零基础入门学习Python全套教程(组图))

优采云 发布时间: 2021-10-10 17:04

  js 爬虫抓取网页数据(Python400集_零基础入门学习Python全套教程(组图))

  大数据时代,互联网成为海量信息的载体,机械复制粘贴不再实用,不仅费时费力,而且极易出错。这时候爬虫的出现,以其高速爬行和定向抓取的能力解放了大家的双手。赢得了大家的青睐。

  爬虫越来越流行,不仅是因为它可以快速爬取海量数据,还因为像python这样简单易用的语言让爬虫可以快速上手。

  对于小白来说,爬取可能是一件非常复杂且技术难度很大的事情,但是掌握正确的方法能够在短时间内爬取主流网站数据,其实是很容易实现的。但建议您从一开始就有一个特定的目标。

  在您的目标驱动下,您的学习将更加精确和高效。所有你认为必要的前置知识都可以在实现目标的过程中学习。

  筛选和筛选要学习的知识以及从哪里获取资源是许多初学者面临的常见问题。

  接下来我们将拆解学习框架,详细介绍各个部分并推荐一些相关资源,告诉大家学什么、怎么学、去哪里学。

  Python400 set_zero-based入门学习Python全套教程

  

  爬虫简介

  爬虫是按照一定的规则自动抓取万维网上信息的程序或脚本。

  这个定义看起来很生硬,我们换个更好的理解:我们作为用户获取网络数据的方式是向浏览器提交请求->下载网页代码->解析/渲染成页面;而爬取的方式是模拟浏览器发送请求->下载网页代码->只提取有用的数据->存入数据库或文件中。爬虫和我们的区别在于,爬虫程序只提取网页代码中对我们有用的数据,爬虫爬得快,量级大。

  随着数据的规模化,爬虫获取数据的高效性能越来越突出,可以做的事情也越来越多:市场分析:电商分析、商圈分析、一二级市场分析等。市场监测:电商、新闻、房屋监测等·商机发现:招投标情报发现、客户信息发现、企业客户发现等。

  要学习爬虫,首先要明白它是一个网页。那些我们肉眼可见的明亮漂亮的网页,是由HTML、css、javascript等网页的源代码支持的。这些源代码被浏览器识别并转换成我们看到的网页。这些源代码中肯定有很多规则,我们的爬虫可以根据这些规则抓取到需要的信息。

  没有规则就没有规则。Robots 协议是爬虫中的规则。它告诉爬虫和搜索引擎哪些页面可以被爬取,哪些页面不能被爬取。通常是一个名为robots.txt的文本文件,放在网站的根目录下。

  轻量级爬虫

  “获取数据-解析数据-存储数据”是爬虫三部曲。大多数爬虫都遵循这个过程,它实际上模拟了使用浏览器获取网页信息的过程。

  1、获取数据

  爬虫的第一个操作是模拟浏览器向服务器发送请求。基于python,不需要从数据的实现,HTTP、TCP、IP的网络传输结构,一路了解服务器响应和响应的原理,因为python提供了一个功能齐全的类库帮助我们满足这些要求。Python内置的标准库urllib2用的比较多。它是python内置的HTTP请求库。如果只做基本的抓取网页抓取,那么urllib2就足够了。Requests 的口号是“Requests 是 Python 唯一的 Non-GMO HTTP 库,对人类消费安全”。和urllib2相比,requests使用起来确实简洁很多,而且自带json解析器。如果需要爬取异步加载的动态网站,你可以学习浏览器捕获来分析真实的请求,或者学习 Selenium 来实现自动化。当然对于爬虫来说,只要能爬取数据,越快越好。显然,传统的同步代码不能满足我们对速度的需求。

  (ps:据国外统计:一般情况下,我们请求同一个页面100次,至少需要30秒,但是如果我们异步请求同一个页面100次,大约只需要3秒。)

  aiohttp 是一个你值得拥有的库。借助 async/await 关键字,aiohttp 的异步操作变得更加简洁明了。当使用异步请求库进行数据获取时,效率会大大提高。

  可以根据自己的需要选择合适的请求库,但是建议从python自带的urllib入手。当然,您可以在学习的同时尝试所有方法,以更好地了解这些库的使用。

  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,那绝对是为了你自己的方便。

  3、数据存储

  当爬回的数据量较小时,可以以文档的形式存储,支持TXT、json、csv等格式。

  但是当数据量变大时,文档的存储方式就不行了,所以需要掌握一个数据库。

  Mysql作为关系型数据库的代表,有着较为成熟的系统,成熟度较高。可以很好的存储一些数据,但是处理海量数据时效率会明显变慢,已经不能满足一些大数据的需求。加工要求。

  MongoDB 已经流行了很长时间。与 MySQL 相比,MongoDB 可以轻松存储一些非结构化数据,例如各种评论的文本、图片链接等。您还可以使用 PyMongo 更轻松地在 Python 中操作 MongoDB。因为这里要用到的数据库知识其实很简单,主要是如何存储数据,如何提取,需要的时候学习。

  Redis 是一个不妥协的内存数据库。Redis支持丰富的数据结构,包括hash、set、list等,数据全部存储在内存中,访问速度快,可以存储大量数据,一般用于分布式的数据存储爬虫。

  工程履带

  通过掌握前面的技术,可以实现轻量级爬虫,一般量级的数据和代码基本没有问题。

  但在面对复杂情况时,表现并不令人满意。这时候,一个强大的爬虫框架就非常有用了。

  第一个是 Nutch,来自一个著名家族的顶级 Apache 项目,它提供了我们运行自己的搜索引擎所需的所有工具。

  支持分布式爬取,通过Hadoop支持,可以进行多机分布式爬取、存储和索引。

  另一个非常吸引人的地方是它提供了一个插件框架,可以方便的扩展各种网页内容分析、各种数据采集、查询、聚类、过滤等功能。

  接下来是GitHub上大家star的scrapy,severe是一个非常强大的爬虫框架。

  它不仅可以轻松构造请求,还具有强大的选择器,可以轻松解析响应。然而,最令人惊讶的是它的超高性能,它可以让你对爬虫进行工程化和模块化。

  学习了scrapy之后就可以自己搭建一些爬虫框架了,基本就具备爬虫工程师的思维了。

  最后,Pyspider作为国内大神开发的框架,满足了大部分Python爬虫的针对性爬取和结构化分析的需求。

  可以在浏览器界面进行脚本编写、函数调度、实时查看爬取结果,后端使用常用数据库存储爬取结果。

  它的功能是如此强大,以至于它更像是一个产品而不是一个框架。

  这是三个最具代表性的爬虫框架。它们都有着远超其他的优势,比如Nutch的自然搜索引擎解决方案,Pyspider产品级的WebUI,以及Scrapy最灵活的定制爬取。建议先从最接近爬虫本质的可怕框架入手,然后接触为搜索引擎而生的人性化的Pyspider和Nutch。

  防爬虫对策

  爬虫就像一个虫子,密密麻麻地爬到每一个角落获取数据。这个错误可能是无害的,但它总是不受欢迎的。

  由于爬虫技术网站对带宽资源的侵犯导致大量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甚至其他数据库系统作为其消息代理中间件,在处理异步任务、任务调度、处理定时任务、分布式调度等场景中表现良好。

  所以分布式爬虫听起来有点吓人,但仅此而已。当你可以编写分布式爬虫时,那么你就可以尝试构建一些基本的爬虫架构。

  实现一些更自动化的数据采集。

  你看,沿着这条完整的学习路径走下去,爬虫对你来说根本不是问题。

  因为爬虫技术不需要你系统地精通一门语言,也不需要非常先进的数据库技术。

  解锁各部分知识点,有针对性地学习。经过这条顺利的学习路径,你将能够掌握python爬虫。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线