最新优化知识

如何构建一个网络爬虫,下载整个互联网上全部的网页。 对于这道问题,有些面试者会简单地回答道:”这很简单。整个互联网是彼此连通的,从任何一个网页出发,跟随它的超链接采用深度优先算法,或者广度优先算法,就可以下载整个互联网了。” 这个道理是对的,事实上你如果用开源的软件,从一家门户网站比如雅虎的首页出发,先下载这个网页,然后通过分析这个网页,可以找到页面里的所有超链接,也就等于知道了这家门户网站首页所直接链接的全部网页,诸如雅虎邮件、雅虎财经、雅虎新闻等。接下来访问、下载并分析这家门户网站的邮件等网页,又能找到其他相连的网页。让计算机不停地做下去,就能下载很多很多网页。 但是,如果一个候选人对图论或者网络爬虫的理解仅仅到这一步,他一定无法搭建起一个实用的程序,当然也无法通过Google的面试。因为他忽略了太多的实际问题。对于这道面试题,我一般会按照下面的次序一步步追问。 首先我们要知道,现在的互联网非常庞大,今天Google的索引中有超过1万亿个网页,即使更新最频繁的基础索引也有几百亿个网页,假如下载一个网页需要一秒钟,下载这100亿个网页则需要317年。如果下载10000亿个网页则需要32000年左右,是我们人类有文字记载历史的5到6倍的时间,这显然不现实。 顺便说一句,下载每一个网页因为需要有网络通信的时间,网速再快这个时间也省不了,因此时间不会太短,即便缩短10倍,100亿个网页花31.7年或者1万亿个网页花3200年也是一个不可接受的时长。 当然,有点计算机工作经验的人会马上想到使用并行计算,比如让1000台服务器同时工作,这样下载100亿个网页大约只需要半个月的时间,这是可以接受的,当然,下载1万亿个网页还有点挑战性。然而,世界上任何事情都是有成本的,并行计算也是如此。 为了保障这1000台服务器不会把某个网页访问好几次,而把另外一些网页漏掉,需要有一个小本本,记录已经下载过的网页。这个小本本需要多大呢?如果每一个网页写上一笔只需要8个字节,那么存100亿个网页的记录也需要80GB的内存,今天还没有哪台通用的服务器有这么大的内存。即使有,如果我们把这个关于已经下载网页记录的”小本本”放在一台服务器上,所有其它服务器在决定是否下载某个网页之前先要询问它一次,它也一定会成为瓶颈。然而,如果不把”小本本”集中管理,而是分散到各个服务器中,那么每一次下载,都要询问所有的服务器,也显然不现实。 因此,这道看起来很简单的面试题,里面有很多玄机。事实上,一个商业的网络爬虫需要有成千上万个服务器,并且通过高速网络连接起来。如何建立起这样复杂的网络系统,如何协调这些服务器的任务,就是网络设计和程序设计的艺术了。 至于小本本怎么管理,其实就要用到我在写给你的第64封信中,讲到的随机化的原理了,随机化之后看上去无序,其实反而变得有规律可循,于是每个服务器看到一个网页,都知道这个网页是否属于自己的工作范围,如果不属于,则通知相应的服务器去处理,而不需要到处广播。 再接下来,我常常会问候选人,图论中给出了广度优先遍历(BFS)和深度优先遍历(DFS)两种算法,到底该用哪个呢? 虽然从理论上讲,这两个算法(在不考虑时间因素的前提下)都能够在大致相同的时间里”爬下”整个”静态”互联网上的内容,但这只是理论上的可行性,它有两个假设——不考虑时间因素,互联网静态不变,都是现实中做不到的。 搜索引擎的网络爬虫问题更应该定义成”如何在有限时间里最多地爬下最重要的网页”。显然各个网站最重要的网页应该是它的首页。在最极端的情况下,如果爬虫非常小,只能下载非常有限的网页,那么应该下载的是所有网站的首页,如果把爬虫再扩大些,应该爬下从首页直接链接的网页(就如同和北京直接相连的城市),因为这些网页是网站设计者自己认为相当重要的网页。在这个前提下,显然BFS明显优于DFS。 事实上在搜索引擎的爬虫里,虽然不是简单地采用BFS,但是先爬哪个网页,后爬哪个网页的调度程序,原理上基本上是BFS。 那么是否DFS就不使用了呢?也不是这样的。这是和爬虫的分布式结构以及网络通信的握手成本有关。所谓”握手”就是指下载服务器和网站的服务器建立通信的过程。这个过程需要额外的时间(Overhead Time),如果握手的次数太多,下载的效率就降低了。 实际的网络爬虫都是一个由成百上千甚至成千上万台服务器组成的分布式系统。对于某个网站,一般是由特定的一台或者几台服务器专门下载。这些服务器下载完一个网站,然后再进入下一个网站,而不是每个网站先轮流下载5%,然后再回过头来下载第二批。这样可以避免握手的次数太多。如果是下载完第一个网站再下载第二个,那么这又有点像DFS,虽然下载同一个网站(或者子网站)时,还是需要用BFS的。 总结起来,网络爬虫对网页遍历的次序不是简单的BFS或者DFS,而是有一个相对复杂的下载优先级排序的方法。管理这个优先级排序的子系统一般称为调度系统(Scheduler),由它来决定当一个网页下载完成后,接下来下载哪一个。 当然在调度系统里需要存储那些已经发现但是尚未下载的网页的URL,它们一般存在一个优先级队列(Priority Queue)里。而用这种方式遍历整个互联网,在工程上和BFS更相似。因此,在爬虫中,BFS的成分多一些。 如果一个候选人能把这些因素都考虑进去,他已经通过我的面试了。但是,如果我有时间,还会继续追问一个看似简单,但在工程上很复杂的问题,那就是如何分析一个HTML页面,然后把里面的超链接地址URL提取出来? 这件事在过去并不难,因为过去的网站都是明码编写这些URL,前后都有明显的标识,很容易提取出来。但是现在很多URL的提取就不那么直接了,因为很多网页如今是用一些脚本语言(比如JavaScript)生成的。打开网页的源代码,URL不是直接可见的文本,而是运行这一段脚本后才能得到的结果。 因此,网络爬虫的页面分析就变得复杂很多,它要模拟浏览器运行一个网页,才能得到里面隐含的URL。有些网页的脚本写得非常不规范,以至于解析起来非常困难。可是,这些网页还是可以在浏览器中打开,说明浏览器可以解析。因此,需要做浏览器内核的工程师来写网络爬虫中的解析程序,可惜出色的浏览器内核工程师在全世界数量并不多。 除此之外,建立互联网的下载爬虫还有很多技术细节,比如有些网站网页更新快,如何处理?有些几乎是静态的网页,平时没有更新,又该如何处理等等。这些因为篇幅的问题我就不介绍了。 总之,”如何构建一个网络爬虫”是我在Google最常使用的一道面试题,虽然很多候选人知道我要问他们这个问题,但是依然很难回答得圆满,因为这个问题太开放了,我能找到他们显示出的弱点,不断追问下去。 当然,我不断提问不是为了为难哪个候选人,而是为了有效地考察出一个候选人的计算机科学理论基础、算法能力和他的工程素养。而我给候选人的打分也未必和他的感觉一致,对有些人我问得比较深,是因为我已经判断出基本的原理他都懂了,不必要问了,他即使觉得没有回答完美,我的打分可能也很高。但是,如果一个仅仅有执行能力,但对这个问题有太多地方没有考虑到,我可能就不会往深了问,因此即使他们觉得都答上来,也不会通过面试。 你可能会好奇Google的索引大约有多大,我只能告诉你基本的索引,即上百万的索引每一份使用了上万台服务器,而在全世界它有很多份。此外,在亚洲的索引,中日韩文的内容会多些,而在欧洲的法、意、德、西(FIGS)语言的内容会多些。 最后总结一下今天的内容: 1. 通过网络爬虫的例子,你可能对计算机科学和工程的区别有了更多的理解。事实上,任何事情,原理要尽可能简单,而实现起来要尽可能周到。 2. 一个好的工程师,不能简简单单地把那些有明确答案的问题做好,而要能做好没有答案的开放式问题。事实上,我对网络爬虫的理解从进Google到离开Google十多年来也是不断在加深的。我昨天用10分钟就把网络爬虫的原理讲给你听了,但是你真要能写一个好的程序,没有几年的工作经验是办不到的。 3. 大家对今天信息的量级要有体会。在图论出现后的很长时间里,现实世界中图的大小都是在几千个节点以下的规模(比如公路图、铁路图等)。那时候,图的遍历是一件很简单的事情,因此在工业界没有多少人专门研究这个问题。但是等到了互联网出现后,图的大小就从几千增加到上万亿了。 4. 很多数学方法,早期看上去没有什么实际用途,但是随着时间的推移会一下子派上大用场,这就是数学的妙处。

Read More 吴军说谷歌爬虫技术和如何下载整个互联网网页

(来源: Stephen聊跨境) 好的营销工具可以帮助卖家更轻松地工作,本文列出了社交媒体营销人员可以使用的六种免费SEO工具。 每个营销人员都有他们最喜欢的一套工具,可以帮助他们更轻松地工作。当你在寻找新的工具时,你可能会坚持专门为你的行业制作的工具。例如,电子邮件营销人员可能会使用自动回复或编码工具。社交媒体营销人员使用社交媒体管理工具和SEO,使用关键字研究和分析工具。但谁说你的工具必须局限于你的特定行业? 今天Stephen列出了社交媒体营销人员可以使用的六种免费SEO工具,帮助各位在独立站运营过程当中更上一层楼。 1. Google Analytics 功能: Google Analytics是SEO和网络营销人员使用的最受欢迎的网站分析工具之一,因为它可以为您提供关于您网站流量的大量信息。您可以从首次访问您网站的人员统计信息以及他们如何登陆该网站的情况中看到所有信息。Google Analytics很容易成为最好的整体营销工具之一,不仅仅局限于搜索引擎优化或社交媒体。 社交媒体营销人员如何使用它? Google Analytics有整个部分专门用于社交媒体推荐流量。您可以看到哪些平台正在为您的网站带来流量,并了解该流量的质量。 社交媒体营销人员可以使用此信息来查看诸如哪些文章社交媒体用户喜欢最好的信息。你可以通过平台打破数据。在此屏幕上,点击下拉菜单并选择来源。 这将显示您网站上社交媒体访问量最大的网页,并按网络细分。使用此报告了解受众希望在每个网络上看到的内容类型。 您还可以将Google Analytics与报告功能结合起来,全面了解您的社交媒体受众如何参与您的内容。使用报告可查看您的帖子在社交媒体上的参与程度,然后使用Google Analytics(分析)了解这些访问者与您网站的互动情况。 2. Google Search Console 功能: Google Search Console(GSC)是一款免费工具,可让您深入了解您的网站在搜索中的显示方式。它还使Google能够与网站管理员取得联系,以通知他们网站的任何技术问题。例如,如果Google怀疑您的网站可能遭到黑客入侵,或者您因违反Google的TOS而受到处罚,则会收到通知。查看Google的帮助页面,详细了解可从GSC获取的所有数据。 社交媒体营销人员如何使用它: GSC是最受欢迎的免费搜索引擎优化工具之一,但它也具有社交媒体营销人员可以从搜索分析中受益的一些功能。 搜索分析会向您显示有关人们在Google中输入的查询以便登录到您的网站的信息。不仅如此,它还会向您显示您网站获得的展示次数和平均点击率的估算值。请务必记住,数据不包含您的所有流量。由于Google的隐私设置,它不会计算每个查询。但它给你的信息仍然非常有帮助。 以下是如何将搜索分析用于您的社交活动。 社交媒体营销难题的一个重要部分就是了解你的观众想要看什么类型的内容。来自GSC的数据通过展示人们搜索查找您的网站的实际术语来解决这一问题。 您还可以按页面或关键字过滤结果,以获得更有针对性的结果。例如,假设我们希望更好地了解受众希望看到的Instagram相关内容的类型。我们会前往GSC,点击查询标签并过滤结果以显示包含“Instagram”的查询。 当您点击过滤器时,GSC将返回您的网站在Google中显示的含有Instagram单词的查询列表。 现在我们知道人们在寻找什么,我们可以分享与这些主题相关的内容。 3. Moz Open Site Explorer 它的作用: Moz Open Site Explorer(OSE)是一个免费的搜索引擎优化工具,可以让你检查给定页面的反向链接数据,另外还可以查看域和页面权限以及其他有用的数据。SEO用它来查看谁与他们以及他们的竞争对手之间的联系。你只能免费看到数量有限的数据,但对于社交媒体团队来说应该是充足的。 社交媒体营销人员如何使用它: OSE用于社交媒体营销人员的最佳用途之一是进行一些竞争性分析。当你试图推广一个新的内容时,一个好的开始就是检查谁分享了类似的东西。您可以使用OSE检查链接到特定页面的网站。然后,只需接触那些相同的网站,并让他们知道您刚刚发布了他们可能感兴趣的文章。 您可以通过电子邮件与他们联系,或在分享文章链接时在Twitter上提及他们。不需要挑衅或要求任何东西。你只是在建立这种意识。 开始之前,请插入您的竞争对手的文章。 然后Moz会给你一个链接到该网站的所有页面的列表。每个结果都是您可能接触到的网站。 4. SERP Rank Checker…

Read More 6款免费的SEO工具

SEO头疼吗?肯定头疼,那么有什么办法能使你的SEO技能更上一层楼,那就不得不提各式SEO工具的使用。本文为热衷技术SEO的SEO人员们奉上了一分优质工具清单,请查收: 1、 Bing Webmaster Tools 如果你有涉足必应,那么Bing Webmaster Tools是一个很使用的SEO工具,特别是在关键词研究方面,它将向你展示你的关键词在必应的搜索量。 官网链接:https://www.bing.com/toolbox/webmaster 2、Browseo Browseo将向用户展示搜索引擎爬虫的网站抓取原理和规律,以及爬虫对用户网站的判断。 官网链接:http://www.browseo.net/ 3、Google Analytics Referrer Spam Killer 如果你使用Google Analytics ,将其链接到Referrer Spam Killer中,Referrer Spam Killer会在你的账户中添加过滤器,能够过滤掉超过100个已知的垃圾网站。 官网链接:https://www.adwordsrobot.com/en/tools/ga-referrer-spam-killer 4、Google Mobile-Friendly Test 想知道自己的网站在移动端的表现如何?将该网站的链接放入Google Mobile-Friendly Test中,它会告诉你网站的表现情况。 官网链接:https://www.google.com/webmasters/tools/mobile-friendly/ 5、Google PageSpeed Insights 网站加载速度对网站在搜索结果中的排名影响极大, 你可以使用Google PageSpeed insights了解谷歌是如何评价你的网站加载速度。Google PageSpeed insights还会为你提供一些可操作的建议,来加快网站加载速度。 官网链接:https://developers.google.com/speed/pagespeed/insights/ 6、GTmetrix Google Page Speed Insights通过查看网站的代码来检查网站加载速度,而GTmetrix是加载你的网站来查看并提供意见。 官网链接:https://gtmetrix.com/ 7、Hreflang Tags Generator Tool Hreflang Tags Generator…

Read More SEO人员需要的工具

全球网络流量的竞争激烈异常,企业要获得流量最普遍的做法是进行SEO,链接构建是其中的一个关键点。本文将介绍几个链接构建工具帮你进阶: 1、Check My Links Check My Links是一款谷歌拓展程序,如果你不善于链接建设,那么你会喜欢它的,只需简单点击一个按钮,这个程序将快速检查网页中的所有失效链接,并标记出来。 官网链接:https://chrome.google.com/webstore/detail/check-my-links/ojkcdipcgfaekbeaelaapakgnjflfglf 2、Detailed Detailed会为用户提供所在的利基范围的一些网站排名,排名是依据网站的外链数、反链数,以及推特提及数给出的。 Detailed还会生成一份报告,让你清楚哪些人或网站分享了相关的链接,这将有利于你的链接建设和内容推广。 官网链接: https://detailed.com/ 3、disavow.it 如果你认为存在垃圾反向链接正在影响你的网站流量,Disavow.it会把所有的垃圾链接找出来,整合成一个纯文本文件,你只需将文件上传到谷歌网站管理员工具中,即可删除这些链接。 官网链接:http://disavow.it/ 4、Domain Hunter Plus Domain Hunter Plus与Check My Links类似,但该工具还会检查失效链接的域名是否可以注册。 官网链接:https://netvantagemarketing.com/about/domain-hunter-plus 5、LinkMiner LinkMiner和许多工具一样能够检查网页中的失效链接,但LinkMiner 还会给出失效链接的数量。此外,LinkMiner能够向用户展示谷歌搜索结果中的网页有多少个导出链接,这样你也可以对自己网页中的导出链接数量进行调整。 官网链接:http://pointblankseo.com/linkminer 6、MailShake MailShake是一个很好的推广工具,为用户提供大量的电子邮件模板。 官网链接:https://mailshake.com/ 7、Marie Haynes’ Disavow Blacklist 想知道一个链接对你的SEO工作是否有益,将该网页的链接添加到Marie Haynes’ Disavow Blacklist中, Marie Haynes’ Disavow Blacklist会基于自己的垃圾网站名单进行判断并给出答案,如果是你可以将其添加到否定链接名单中。 官网链接:https://www.mariehaynes.com/blacklist/ 8、Outeach Plus Outeach Plus是一个新的电子邮件推广工具,旨在自动化、简化和跟踪你的邮件推广。 官网链接:https://www.outreachplus.com/ 9、Siege Media Embed Code Generator…

Read More 2018最好的9个外部链接构建工具