Blog/public/searching/index.html
2024-04-25 11:13:07 +08:00

314 lines
15 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<title>Dich&#x27;blog</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5">
<meta name="robots" content="noodp"/>
<link rel="stylesheet" href="https://blog.dich.ink/style.css">
<link rel="stylesheet" href="https://blog.dich.ink/color/blue.css">
<link rel="stylesheet" href="https://blog.dich.ink/color/background_dark.css">
<link rel="stylesheet" href="https://blog.dich.ink/font-hack-subset.css">
<meta name="description" content="">
<meta property="og:description" content="">
<meta property="og:title" content="Dich'blog">
<meta property="og:type" content="article">
<meta property="og:url" content="https://blog.dich.ink/searching/">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:description" content="">
<meta name="twitter:title" content="Dich'blog">
<meta property="twitter:domain" content="blog.dich.ink">
<meta property="twitter:url" content="https://blog.dich.ink/searching/">
<link rel="alternate" type="application/atom+xml" title="RSS" href="https://blog.dich.ink/atom.xml">
</head>
<body class="">
<div class="container">
<header class="header">
<div class="header__inner">
<div class="header__logo">
<a href="https://blog.dich.ink" style="text-decoration: none;">
<div class="logo">
Dich&#x27;blog
</div>
</a>
</div>
</div>
<nav class="menu">
<ul class="menu__inner">
<li class="active"><a href="https://blog.dich.ink">blog</a></li>
<li><a href="https://blog.dich.ink/tags">tags</a></li>
<li><a href="https://blog.dich.ink/archive">archive</a></li>
<li><a href="https://blog.dich.ink/about">about me</a></li>
<li><a href="https://blog.dich.ink/links">links</a></li>
<li><a href="https://github.com/Dichgrem" target="_blank" rel="noopener noreferrer">github</a></li>
</ul>
</nav>
</header>
<div class="content">
<div class="post">
<h1 class="post-title"><a href="https://blog.dich.ink/searching/">Network的艺术:搜索引擎与爬虫</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-02-11
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/searching/">#Searching</a>&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/tech/">#Tech</a></span>
<div class="post-content">
<p>前言 搜索引擎原理可以简单分为三个过程:爬行,索引,排名。</p>
<span id="continue-reading"></span><h2 id="yi-li-shi">一.历史</h2>
<p>1990年当时人们依赖 ftp 协议共享文件资源。必须一字不差地输入文件名称,才能得到一个能下载该文件的 ftp 地址。</p>
<p>1995年风云一时的 Yahoo 诞生。当时 Yahoo 利用的是人工编辑导航目录的方式来给用户提供服务。但随着互联网上的 web 网站越来越多,传统的人力收录形式逐渐不再适用。</p>
<p>1998年全球最大的搜索引擎 Google 成立,一种查找网页的自动化程序也开始被应用,这种程序就叫爬虫。</p>
<h2 id="er-pa-chong">二.爬虫</h2>
<p>搜索引擎原理可以简单分为三个过程:爬行,索引,排名。</p>
<p><strong>爬行</strong></p>
<p>爬行是谷歌爬虫抓取并解析页面HTML的过程。这个时候爬虫看到的类似纯文字版的网页快照。也就是未执行CSS和JS的页面。这个时候谷歌会记录网页的一些相关信息比如标题关键词原描述文本内容链接等。</p>
<p>对于新站其实最需要解决的就是收录。互联网也就是一张由无数链接形成的大网蜘蛛spider通过跟踪链接访问页面当发出页面访问请求之后服务器会返回HTML代码。蜘蛛会将采集到的程序收入原始页面数据库。</p>
<p>蜘蛛的爬取方式分为两种:</p>
<p><strong>纵向抓取</strong>:蜘蛛在网站上发现一个链接,就会沿着这个链接一直深入,发现一个,抓一个,直到无法再找到新链接。</p>
<p><strong>横向抓取</strong>:蜘蛛在网站上发现一个链接,先将第一层级的链接全部爬取完,再进入第二层级抓取,直到爬取完网站的最深层级。</p>
<p>网站的纵向抓取和横向抓取往往是同时进行的理论上只要给予足够的时间那么蜘蛛就会将网站上的所有链接全部抓取。但是由于资源的限制我们在查看蜘蛛的crawl记录时就会发现其实很多页面并没有被爬取。</p>
<p>既然蜘蛛没有办法爬行所有页面,那么那些页面会优先抓取呢?</p>
<ul>
<li>
<p>高DA和高PA页面即网站和页面的权重高蜘蛛就会优先爬取</p>
</li>
<li>
<p>更新时间:页面更新频繁会吸引蜘蛛抓取</p>
</li>
<li>
<p>导入链接:高权重的导入链接,这也就是外链要尽量选择高权重网站的原因</p>
</li>
<li>
<p>与首页距离:层级距离首页越近,权重越高,越可能被蜘蛛爬取</p>
</li>
</ul>
<p><strong>地址库</strong></p>
<p>网络上的资源非常丰富和繁杂,为了节省资源,搜索引擎会建立一个地址库,将已经发现但是并没有抓取的页面和已经抓取的页面记录在里面。</p>
<p>地址库的网址往往有以下三种来源:</p>
<ul>
<li>
<p>人工录入的种子网站</p>
</li>
<li>
<p>蜘蛛爬取页面后解析出网址,如果不存在,就录入</p>
</li>
<li>
<p>通过站长工具提交网址,例如 google search console</p>
</li>
</ul>
<p><strong>索引</strong></p>
<p>在索引(indexing)过程中,谷歌会将被抓取的页面内容组织起来,形成一个巨大的索引库。谷歌的 Caffeine 索引机制又会对网页进行渲染执行CSS和JS从而更好地理解你网页的内容。</p>
<ul>
<li>
<p>提取文字:搜索引擎会提取页面中的可见文字,以及包含文字信息的代码。如 meta 标签alt 属性,锚文本等</p>
</li>
<li>
<p>分词:例如对于 Where can I buy a high quality table ,那么 a high quality table 就会被视为一个词,而不是 buy a high 。对于不同国家的文字,每个搜索引擎的分词方式都是有区别的。</p>
</li>
<li>
<p>去停止词:不论英文还是中文都会经常出现一些对于页面主体内容没有多大影响,但是出现频率较高的词,例如语气词,介词,副词,感叹词等。搜索引擎会在建立这些页面之前去除这些词。</p>
</li>
<li>
<p>消除噪声:页面上会存在一部分内容对于确认页面主题并无帮助,例如版权声明,导航等。这些内容也会在存入索引之前被清除。</p>
</li>
<li>
<p>去重:因为搜索引擎并不喜欢重复的内容,所以对于重复度过高的页面也是会被清除的。因此我们网站的页面内容一定要尽可能的稀释重复度。</p>
</li>
<li>
<p>正向索引:经过上述步骤之后,搜索引擎得到的就是可以反应页面主题的内容,他会记录每个关键词在页面上出现的频率,格式,位置,然后将这些数据存储在索引库中。</p>
</li>
<li>
<p>倒排索引:正向索引是将页面对应到关键词,倒排索引是将关键词对应到页面。这样用户在搜索的时候,可以迅速确定页面</p>
</li>
<li>
<p>链接关系计算链接关系计算是针对内链和外链维度包括链接的数量导入链接权重。Google PR 就是这个计算结果的体现。</p>
</li>
<li>
<p>特殊文件:谷歌不仅可以抓取 html 网页,对于 PDFTXTWord 这种文字占比例较高的文件也是可以抓取的。</p>
</li>
</ul>
<p><strong>排名</strong></p>
<p>排名过程其实在爬取和索引的时候就开始了。到了索引阶段,谷歌会为网页计算一些指标,作为排名算法的初始数据。当用户搜索问题时,谷歌会进行语义分析,理解用户搜索意图,并执行排名算法,根据页面相关性得分为每个页面排序,最终形成搜索结果页面。</p>
<p>搜索词:对用户输入的搜索词进行去停止词处理,搜索指令处理</p>
<p>文件匹配用户可能搜索的是网页也可能是PDF或者JPG图片。</p>
<p>初始子集选择:因为在这个阶段,能够匹配的网页数量是巨大的,所以会根据页面的权重首先选出一个子集</p>
<p>相关性计算(最重要的一步):</p>
<ul>
<li>
<p>关键词常用度:越常用的词对于搜索词的用处越小</p>
</li>
<li>
<p>关键词密度:密度越大,该页面的相关性越高,但是现在这个因素对于页面的排名已经不太重要。</p>
</li>
<li>
<p>关键词的位置和形式粗体H标签都表明这是较为重要的关键词位于段落开头的关键词比段尾的关键词拥有更高的权重所以建议将搜索量最高的关键词放在段首其余关键词较为自然的分布的文章中。</p>
</li>
<li>
<p>关键词匹配度:能够完整的匹配用户的搜索词,证明页面的相关性越高。</p>
</li>
<li>
<p>页面权重页面权重和很多因素相关例如导入链接DA域名权重等。</p>
</li>
<li>
<p>排名过滤:现在已经基本得到了关键词的排名,但是对于曾经有过作弊为行为的网站,谷歌会对其 ranking 进行下调,以示惩罚。</p>
</li>
<li>
<p>页面显示排名确定后搜索引擎会调用页面的meta标签也就是 title 和 description 。</p>
</li>
<li>
<p>搜索缓存:对于重复搜索词,搜索引擎是会将结果进行缓存的。</p>
</li>
<li>
<p>搜索日志搜索引擎会将用户的搜索词点击网页ip,搜索时间都进行记录,便于判断搜索结果的质量,调整算法,预测搜索趋势等。</p>
</li>
</ul>
<h2 id="san-seoyu-sou-suo-ji-qiao">三.SEO与搜索技巧</h2>
<p>在商业的驱动下,催生了一个职业叫搜索引擎优化,通常会简称为 SEO 。</p>
<p>在搜索结果中你会发现很多网站明明不提供有效信息却排名靠前。那是因为它们通过掌握搜索引擎排名的规律利用一些作弊手段“骗”过了程序。例如关键词堆积、隐藏链接、PR劫持、模拟点击、模拟发包等。这些在业内被叫做黑帽SEO。</p>
<p>不过虽然你无法改变算法,但如果想让自己的搜索结果更干净,其实也有一些搜索技巧可以使用。</p>
<p>例如,</p>
<ul>
<li>
<p>精确搜索:“关键词”,利用双引号 ,这样关键词不会被拆分</p>
</li>
<li>
<p>模糊搜索:利用*号代替文字</p>
</li>
<li>
<p>site查找指定网站的所有页面site:网站链接</p>
</li>
<li>
<p>关键词site查找指定网站的关键词关键词 site:网站链接</p>
</li>
<li>
<p>关键词A +关键词B同时搜索多个关键词+前面记得加空格</p>
</li>
<li>
<p>关键词A -关键词B排除搜索结果中不想看到的内容-前面记得加空格</p>
</li>
<li>
<p>intitle标题中含搜索词的内容intitle:关键词</p>
</li>
<li>
<p>intext正文中含搜索词的内容intext:关键词</p>
</li>
<li>
<p>inurlurl网址中含搜索词的内容url:关键词</p>
</li>
<li>
<p>filetype搜索指定格式的文件关键词 filetype:格式后缀</p>
</li>
<li>
<p>叠加使用方法:比如排期搜索结果中不想看到的网址,搜索词 -site:网站链接</p>
</li>
</ul>
<h2 id="si-bu-chong">四.补充</h2>
<ul>
<li>什么是 robots.txt</li>
</ul>
<p>robots.txt 文件可以指定那些我们不希望被爬虫访问的页面,比如,管理页面、登录页面或者其他不重要的页面等。这样做的原因是,一般来说搜索引擎分配给每个网站的爬行预算是固定的,如果我们将预算浪费在不重要的页面,那么相对应的,我们那些重要的页面,比如产品分类页,产品详情页,被收录的概率就会变低。下方是淘宝的 robots.txt</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>User-agent: Baiduspider
</span><span>
</span><span>Disallow: /
</span><span>
</span><span>User-agent: baiduspider
</span><span>
</span><span>Disallow: /
</span></code></pre>
<ul>
<li>什么是站点地图</li>
</ul>
<p>站点地图可以列出网站上所有的页面,比如产品分类,产品详情页,新闻博客页等。我们将站点地图提交给搜索引擎,可能会帮助爬虫更快地发现我们的网站。谷歌是在谷歌站长后台提交站点地图,其他搜索引擎同理。</p>
</div>
<div class="pagination">
<div class="pagination__title">
<span class="pagination__title-h">Thanks for reading! Read other posts?</span>
<hr />
</div>
<div class="pagination__buttons">
<span class="button previous">
<a href="https://blog.dich.ink/local-isps-to-cn-report/">
<span class="button__icon"></span>&nbsp;
<span class="button__text">Network的艺术:国内至国际骨干ISP线路整理</span>
</a>
</span>
<span class="button next">
<a href="https://blog.dich.ink/routing/">
<span class="button__text">Network的艺术:路由器原理与组网</span>&nbsp;
<span class="button__icon"></span>
</a>
</span>
</div>
</div>
</div>
</div>
<footer class="footer">
<div class="footer__inner">
<div class="copyright">
<span>©
2024
Dichgrem</span>
<span class="copyright-theme">
<span class="copyright-theme-sep">:: </span>
Theme: <a href="https://github.com/pawroman/zola-theme-terminimal/">Terminimal</a> by pawroman
</span>
</div>
</div>
</footer>
<script async defer src="http://173.249.208.93:12345/tracker.js" data-website-id="cluckwxwg0005qf4n55m737sz"></script>
</div>
</body>
</html>