当前位置: 首页 > 后端技术 > Node.js

爬虫简介

时间:2023-04-03 15:48:03 Node.js

1网络爬虫的简单定义是什么?自动从万维网上抓取信息的程序或脚本。其他不太常用的名称包括ant、autoindex、emulator或worm。简单的说就是:使用预先编写好的程序在网络上抓取需要的数据,这样的程序称为网络爬虫。爬虫的分类网络爬虫可以分为通用网络爬虫(如搜索引擎爬虫,根据几个URL的种子不断抓取数据)和专注网络爬虫(选择性爬取预先定义的主题和相关页面的网络爬虫).A.通用网络爬虫:搜索引擎B.聚焦网络爬虫:抓取特定领域数据的程序。飞猪和携程的行程信息,天眼查的企业信息等2为什么需要爬虫A.解决冷启动问题:一些论坛的假用户B.搜索引擎的基础:爬虫程序是搜索引擎必不可少的;C.构建知识图谱,帮助构建机器学习的训练集:维基百科是一个很好的数据集来源;D、可以进行各种商品的价格比较、趋势分析等;E.其他:比如分析淘宝上竞争对手的数据;微博数据传播影响分析、政府舆情分析、人与人关系分析等。一句话:当今大数据时代,任何价值分析的前提都是数据,而爬虫是获取这个前提的一种低成本高收益的手段。如何做爬虫Python、node、java初级爬虫工程师:1、Web前端知识:HTML、CSS、JavaScript、DOM、DHTML、Ajax、jQuery、json等;信息,比如一些特殊的文字,链接信息,知道什么是偷懒,什么是贪规律;3、可以使用re、cheerio、XPath等获取DOM结构中的一些节点信息;4、了解什么是深度优先、广度优先爬虫算法,以及实践中的使用规则;5.能够分析简单网站的结构。中级爬虫工程师:1、了解Hash是什么,使用简单的MD5、SHA1等算法对数据进行哈希存储;2、熟悉HTTP和HTTPS协议基础知识,了解GET、POST方法,了解HTTP头部信息,包括返回状态码、编码、user-agent、cookie、session等;3.可以设置User-Agent爬取数据,设置代理等;4、知道什么是Request,什么是Response,会使用Fiddler、Wireshark等工具抓取分析简单的网络数据包;对于动态爬虫,学习分析Ajax请求,模拟进行Post数据包请求,抓取clientsession等信息。对于一些简单的网站,可以通过模拟数据包自动登录;5、对于难以处理的网站,学习使用浏览器+selenium来抓取一些动态的网页信息;6.并发下载,通过并行下载加速数据抓取;使用多线程。高级爬虫工程师:...3爬虫的合法性还处于未定义的野蛮阶段,“允许什么行为”的基本秩序还在建设中。至少现在,如果捕获的数据是供个人使用,是没有问题的;如果数据用于转载,那么捕获数据的类型非常重要:一般来说,当捕获的数据用于实现生活时,当存在真实数据(例如,公司地址、电话列表)但原始数据时,允许复制数据(例如,意见或评论)通常受版权限制,不能转载。(知乎的复制会贴上版权信息,这是爬虫很容易得到的干净数据)注意:无论如何,作为访问者,你应该限制自己的爬行行为,这意味着下载请求的速度需要限制在一个合理的值内(同情其他服务器和维护者),也需要设置一个专门的用户代理来标识自己。4爬虫的准备工作:网站背景研究网站背景研究对于专注的网络爬虫来说非常重要。robots协议识别网站使用什么技术找到网站主人5爬虫插入企业的实现案例总结:一般爬虫的流程如下:设置种子站获取网站信息错误处理和日志记录6数据类型网页中的数据数据类型可以简单分为以下三类:结构化数据、半结构化数据和非结构化数据。7如何从网页中提取信息XPath选择节点正则表达式re用于检索/替换与特定模式(规则)匹配的文本。对于文本过滤或者说规则匹配,最强大的就是正则表达式,这是python爬虫不可或缺的法宝。8动态网页的使用场景先看下面的例子:这是在京东看书的场景。我们发现,打开一本书后,第一次打开网站时,并没有立即加载该书的价格、排名等信息和书评信息。相反,它是通过第二个请求或多个异步请求获得的。这样的页面是动态页面。使用动态页面的场景:想要异步刷新的场景。有些网页内容很多,加载一次后对服务器造成很大压力,有些用户不会查看全部内容;GET方式和POST方式处理动态网站比较困难1、处理需要多次交互模拟数据的网站,我们有时会遇到淘宝等大型网站,这些网站非常重视数据版权。他们的网站由大量工程师和技术人员维护。他们也可能通过技术手段,通过使用多个交互数据包来完成网站服务器与用户浏览器之间的交互。如果此时还采用传统的分析数据包的方法,将会更加复杂和困难。那么,有没有一劳永逸的方法来解决这类问题呢?我们的解决方案是:Selenium+PhantomJS。我们的爬虫实际上是在做模拟浏览器的行为。2.ElectronElectron是Github开发的一个开源库,用于使用HTML、CSS和JavaScript构建跨平台桌面应用程序。3、PhantomJS是一个基于webkit的无头浏览器,它可以将网站加载到内存中,并在页面上执行JS,但是没有GUI,所以占用资源少;动态网站信息抓取总结一般来说,我们的爬虫应该尽量模拟真实用户在浏览器上访问服务器网站的行为。如果我们用GET或者POST来模拟浏览器和服务器之间的通信行为,成本比较低,但是对于复杂的网站或者有服务器严密防御的网站,是很难骗过服务器的。Electron+PhantomJS的方案会让我们的程序看起来更像一个普通用户,但是它的效率会低很多,速度也会慢很多。大规模爬取数据时可能会遇到许多新的挑战。(如网站大小设置、等待时间设置等)Cookie、session、终极武器Nightmare浏览器事件:goto、back、forward、refresh,用户事件:click、mousedown、mouseup、mouseover、type、insert、select、check,取消勾选,选择scroll给网页注入脚本:.js.css文件类型原理和油猴差不多,可以自己写js代码注入很方便wait函数可以根据延迟时间或者外观来评价dom元素到浏览器环境中运行的脚本函数,然后返回一个promise函数需要加载整个网站,对于没有保护的网站一般不需要。9高效的数据爬取。人多力量大,人多做事也快。多个爬虫协同工作也更有效率。随着爬取数据的速度加快,抓取的数据量巨大,问题也会凸显出来。对方也会想办法用各种手段来禁止爬虫的行为。10反爬取和反爬取策略随着抓取数据量达到一定程度,爬取过程中数据重复和死链接的问题就会凸显出来。如何解决反爬问题?网站如何发现爬虫一般来说,网站发现爬虫有以下几种简单的策略:1)单个IP的非常规访问频率;2)单个IP的非常规数据流量;3)大量重复简单的网站浏览行为,只下载网页,没有后续的JS、CSS请求;5)通过一些陷阱发现爬虫,比如一些通过CSS对用户隐藏的链接,只有爬虫才会访问;如何反爬网站一般来说,网站会采用以下两种方式:一种简单的防爬虫策略:1.大量使用动态网页,增加了爬虫爬取的难度,重要的数据无法获得。即使爬虫使用web环境渲染(内置浏览器),也会大大增加爬虫的数量(当然,使用动态加载技术会大大减轻服务器的负担)2.基于流量的拒绝:开启带宽限制模块,限制每个IP的最大连接数、最大带宽等;爬虫如何发现您可能被网站识别如果在爬虫过程中出现以下情况,请注意,您的爬虫可能会被网站发现:1.出现验证码;2.UnusualcontentdeliverydelayUnconventionaldelay;3.频繁响应HTTP403、404、301或50x错误;4、如果直接接口返回脏话...爬虫应对反爬的策略我们可以考虑以下几个方面来应对反爬:1)User-Agent池;2)IP代理服务器池;3)CookieJar等的管理;4)协议细节的考虑,比如:抓取需要大量实践经验的数据时,不要处理CSS、JS等;nofollow属性;css显示属性;检测陷阱;验证引用定位器等;5)采用分布式多机策略;慢慢爬,把爬虫放到访问频繁的主站IP子网下,比如教育网;6)使用规则进行批量爬取,需要修改规则组合;7)获取验证码:机器学习,图像识别;8)尽可能遵守Robots协议;9)与各方协调接口和时间段;灰色地带代币