About reptiles

As an Internet technology development, whether crawlers are written by themselves or the websites they are responsible for are crawled, it is quite common.

But a very common thing has not been sorted out systematically. Today we will talk about crawlers from the perspective of development history, value, problems and strategies to deal with malicious crawlers.

1 History of reptile development

The development history of crawlers is accompanied by the development of search engines and the rise of large search engine companies. According to the timeline, it can be roughly divided into three stages:

1.1 Early crawlers in the 90s

Early crawlers were mainly used to collect web links, measure the size of the Internet, or provide search services. Their goals are relatively simple and clear. Their text-based crawling and indexing, most of them are single-threaded and sequential crawling, with simple deduplication strategies and limited crawling scale, and there were fewer restrictions on crawler behavior at that time. Here are some early crawlers:

  • World Wide Web Wanderer (1993): Developed by Matthew Gray at MIT, World Wide Web Wanderer was one of the first web crawlers. It was implemented in Perl language, and its original purpose was to measure the size of the Internet, but then it also started to collect URLs of web pages and store these URLs in a database called Wandex.

  • JumpStation (1993): JumpStation, developed by Jonathon Fletcher, was an early search engine, considered the world's first web search engine, that used a crawler-based approach to collecting links and generating an index. JumpStation utilizes simple text-matching techniques to retrieve web pages and provides a basic search interface.

  • RBSE (Rice-Based Search Engine): The full name is Rice-Based Search Engine, which was developed by Ramin Zabih and Justin Boyan of Rice University. RBSE is a web crawler-based search engine that uses a method called "backward link crawling" for web crawling. This method first finds a known relevant webpage, and then finds more related content by following backlinks from this webpage (that is, other webpages pointing to this webpage).

  • WebCrawler (1994): WebCrawler was developed by Brian Pinkerton as the first full-text search engine. WebCrawler uses crawlers to crawl web pages and store the collected data on index servers. Users can find relevant web pages by searching keywords.

  • Lycos (1994): Lycos is another search engine using crawler technology, developed by Michael Mauldin of Carnegie Mellon University. Lycos became one of the largest search engines of its time, offering more advanced search capabilities and a larger index.

1.2 Crawlers in the era of search engines (late 1990s to early 2000s)

Compared with early crawlers, crawlers in the search engine era already support distributed crawling, support multiple file types and media formats, require more complex webpage parsing techniques, and must abide by website crawling rules. In addition, deduplication , Indexing and privacy protection have made great progress. At this time, the crawlers are working together to provide faster, more accurate, and more comprehensive search results to meet the growing information needs of users. Here are some examples:

  • Scooter (1995): Scooter is a web crawler for AltaVista's public search engine, which AltaVista once claimed was "the fastest web crawler available today." It is responsible for crawling and indexing the web to build AltaVista's search results.

  • Yandex Bot (1997): Yandex Bot is a web crawler for the Russian search engine Yandex. It builds Yandex's search results by crawling and indexing web pages. Yandex uses a machine learning algorithm called MatrixNet to assess the quality and relevance of web pages.

  • Googlebot(1998年):Googlebot 与 Google 搜索引擎一起诞生。Google 的创始人拉里·佩奇(Larry Page)和谢尔盖·布林(Sergey Brin)于 1996 年开始研究他们的搜索引擎项目,最终在 1998 年正式推出 Google 搜索引擎。Googlebot 是 Google 搜索引擎的网络爬虫。它按照一定的算法和策略抓取互联网上的网页,用于构建 Google 的搜索索引。Googlebot 使用了一种称为 PageRank 的链接分析算法来评估网页的相关性和重要性。

  • Bingbot(2006年):Bingbot 是微软旗下搜索引擎 Bing 的网络爬虫。它通过抓取和索引网页来构建 Bing 的搜索结果。Bingbot 采用了一种称为 TrustRank 的算法来评估网页的质量和可信度。

  • Baiduspider(2000年):Baiduspider 是中国搜索引擎百度的网络爬虫。它负责抓取和索引互联网上的中文网页,用于构建百度的搜索结果。百度爬虫使用了一种称为 LinkRank 的链接分析算法。

  • DuckDuckBot(2008年):DuckDuckBot 是以隐私保护著称的搜索引擎 DuckDuckGo 的网络爬虫。虽然 DuckDuckGo 在很大程度上依赖于其他搜索引擎的结果,但它也使用自己的爬虫来抓取和索引网页。

1.3 现代爬虫

随着互联网的快速发展,爬虫技术也在不断进步。一方面,搜索引擎公司继续改进爬虫技术,以提高搜索结果的质量和速度。另一方面,爬虫技术已经成为数据挖掘、竞争情报和市场研究等领域的重要工具。

随着编程语言和开源项目的发展,现在有许多成熟的爬虫框架和库,如 Scrapy、Beautiful Soup、Puppeteer 和 Selenium 等。这些工具使得开发人员可以更容易地创建爬虫程序,以满足各种数据抓取需求。

在爬虫的发展历史中有一个不是规范的规范是一定要讲一下的,那就是 robots.txt 规范。

robots.txt 并不是一个实际的规范,而只是约定俗成的,其并不能真正保证网站的隐私,有点防君子不防小人的味道。

它的由来可以追溯到 1994 年,当时互联网上的 Web 页面数量急剧增加,导致许多搜索引擎和网络爬虫竞相抓取这些内容。然而,不是每个网站都希望被这些网络爬虫抓取和索引。并且,网络爬虫可能消耗大量的服务器资源,影响网站的性能和用户体验。为了解决这个问题,一个荷兰计算机科学家 Martijn Koster 提出了一种简单的解决方案:在网站的根目录下放置一个名为 robots.txt 的文本文件,用来告诉网络爬虫哪些页面可以抓取,哪些不可以。robots.txt 的提出得到了搜索引擎和网络爬虫开发者的广泛支持,逐渐成为了事实上的行业标准。

大多数网络爬虫在访问一个网站之前都会检查 robots.txt 文件,以确定哪些内容可以抓取,哪些需要避免。需要注意的是,robots.txt 文件并没有法律约束力,恶意爬虫可能会忽略它的规则。

2 爬虫的价值和问题

2.1 爬虫的价值

爬虫,作为一种自动遍历、抓取和分析网页内容的技术,为互联网中的信息获取、数据分析和知识发现提供了重要支持。其价值可以分为以下 4 类:

  1. 信息获取与索引
  • 搜索引擎索引:网络爬虫是搜索引擎构建其索引的关键组件。通过抓取和分析网页的内容、结构和链接信息,爬虫帮助搜索引擎构建一个全面、实时的网页数据库,从而为用户提供准确、相关的搜索结果。
  1. 数据分析与挖掘
  • 数据挖掘和分析:爬虫可以用于从互联网上收集大量数据,如新闻、论坛、博客、评论等。这些数据可以用于进一步的数据挖掘和分析,以发现潜在的趋势、模式和关联,为市场研究、竞争分析、舆情监控等应用提供有价值的洞察。

  • 内容监测:爬虫可以用于定期监测网站的内容变化,如新闻发布、产品更新、政策变动等。这有助于及时获取最新信息,为用户和企业提供实时的情报和提醒。

  • 学术研究:网络爬虫在学术研究中具有重要价值。研究人员可以使用爬虫抓取特定主题或领域的数据,进行进一步的分析和挖掘,以揭示潜在的知识和洞见。

  1. 数据整合与应用
  • 数据抓取和整合:爬虫可以用于抓取和整合来自不同来源的数据,如价格、产品规格、库存、评价等。这些数据可用于搭建价格比较网站、产品推荐系统、库存管理系统等,帮助用户和企业做出更明智的决策。

  • 知识图谱构建:通过抓取和分析大量的结构化和非结构化数据,爬虫可以帮助构建知识图谱,捕捉实体之间的关系和属性。知识图谱可用于支持语义搜索、问答系统、推荐系统等智能应用。

  1. 备份与存档
  • 存档和数据备份:网络爬虫可以用于抓取和备份网站的内容,为网页存档项目(如互联网档案馆)提供数据。这可以帮助保留历史信息,供未来的研究和回顾。

2.2 爬虫的问题

在有价值的同时,爬虫也会产生一些问题,这些问题分为两方,一个是对于爬虫发起方,另一个是对于爬虫接受方。

2.2.1 发起方的问题

对于发起方而言,可能有如下的问题:

  1. 技术挑战
  • 动态页面抓取:现代网站普遍采用 JavaScript、AJAX、SPA 等技术,传统的基于静态 HTML 的爬虫难以获取这些数据。例如,网站上的评论区可能是通过 AJAX 动态加载的,传统的爬虫无法直接抓取这些评论内容。

  • 反爬虫措施:许多网站采用各种反爬虫措施,如验证码、IP 限制、Cookie 跟踪等,使得爬虫难以访问和抓取目标数据。例如,购物网站可能会要求用户输入验证码才能查看商品价格,这对爬虫构成了挑战。

  • 网页结构变化:网站经常更新布局和设计,导致爬虫需要不断地适应这些变化。例如,一个新闻网站可能会在某次更新后改变文章标题的 HTML 标签,使得原来的爬虫无法正确抓取标题信息。

  1. 道德与法律问题
  • 隐私侵犯:在抓取用户信息、社交媒体动态等数据时,可能会涉及到用户隐私。例如,一个爬虫可能会抓取用户在社交媒体上的地理位置信息,进而侵犯用户的隐私权。

  • 知识产权侵权:爬虫在抓取内容时可能会触犯知识产权,如未经授权转载的文章、图片、音频等。例如,一个爬虫可能会抓取并转载一篇受版权保护的新闻报道,导致版权纠纷。

  • 法律法规遵守:爬虫在抓取数据时要遵守相关法律法规,如不得抓取违法信息、遵循 robots.txt 协议等。例如,一个爬虫可能会抓取到违反法规的虚假广告,导致法律问题。

  1. 数据质量问题
  • 数据准确性:爬虫抓取的数据可能存在错误、失真、过时等问题。例如,一个爬虫可能因为网站结构变化而抓取到错误的商品价格信息,导致后续分析和应用出现问题。

  • 数据完整性:爬虫抓取的数据可能不完整,无法涵盖所有相关信息。例如,一个用于舆情监控的爬虫可能仅抓取了部分新闻网站的报道,导致分析结果偏颇。

  1. 资源问题
  • 存储和计算资源:爬虫需要消耗大量的存储和计算资源来处理抓取到的数据。例如,一个爬虫可能需要存储数 TB 的网页内容,并对其进行文本分析、图像识别等计算密集型任务,这可能导致存储和计算资源不足。

以上是对爬虫发起方的挑战或问题,对于爬虫接受方面来说,这里可能的问题又分为两个方面,一个是正常的爬虫,如搜索引擎的爬虫,另一个是恶意爬虫。

2.2.2 正常爬虫对网站产生的问题

正常爬虫指的是遵循道德和法律规定,尊重网站权益的爬虫。尽管正常爬虫的目的通常是合理、合法的,但它们仍然可能给被爬网站带来一定的问题:

  • 有限的服务器压力与带宽消耗:正常爬虫在抓取数据时也会占用服务器资源和带宽,尽管通常不会对网站造成严重影响。合理的爬虫应遵循网站的 robots.txt 文件设置,限制抓取速度,以减轻对服务器的压力。

  • 误抓取敏感信息:正常爬虫在抓取数据时可能会误抓取到一些敏感信息,如用户个人信息、电子邮件地址等。为了保护用户隐私,爬虫开发者应尽量避免抓取这类数据,或者在数据处理过程中对敏感信息进行脱敏处理。

  • 数据准确性与完整性:正常爬虫抓取的数据可能存在错误、失真、过时等问题。例如,网站结构变化可能导致爬虫抓取到错误的数据。为了确保数据质量,爬虫开发者需要不断更新和优化爬虫策略。

  • 无意识的知识产权侵权:正常爬虫在抓取网站内容时可能会无意识地触及知识产权问题。为了避免侵权,爬虫开发者应尽量获取授权,或者仅抓取公开可用、非受版权保护的数据。

2.2.3 恶意爬虫对网站产生的问题

恶意爬虫指的是未经授权或者违反网站规定,采用不道德、非法手段抓取数据的爬虫。恶意爬虫可能给被爬网站带来以下问题:

  • 服务器压力与带宽消耗:恶意爬虫可能在短时间内对网站发起大量请求,导致服务器负载过高,甚至引发服务器崩溃,导致正常客户不可用。此外,大量请求会消耗网站的带宽资源,影响其他用户的访问速度。带宽的增加会带来目标网站技术成本的急剧增加

  • 数据隐私与安全:恶意爬虫可能窃取网站的敏感数据,如用户个人信息、登录凭证等。这种行为会侵犯用户隐私,甚至可能导致数据泄露、身份盗用等安全问题。

  • 知识产权侵权:恶意爬虫可能未经授权抓取并转载受版权保护的内容,如文章、图片、音频等。这种行为侵犯了网站及作者的知识产权,可能导致法律纠纷。

  • 网站安全漏洞利用:恶意爬虫可能会利用网站的安全漏洞进行攻击,如 SQL 注入、跨站脚本攻击等。这种行为会影响网站的数据安全和用户隐私。

  • 不良竞争:商业竞争对手可能使用恶意爬虫来抓取网站的数据,如产品信息、价格、促销活动等。这种行为可能导致不公平竞争,影响被爬网站的市场地位和利润。

  • 无效内容或账号滥用:爬虫可能会在网站上发布大量无意义的内容,以达到其目的,如影响内容搜索或排名,并且这些内容需要不同的假账号进行操作,这会对网站的账号体系产生较多的垃圾数据。

3 应对爬虫的问题

可以看到正常的爬虫的问题还能接受,但是针对恶意爬虫我们要打起十二分的精神,以防止其对我们网站的破坏。通过以下的一些手段我们可以缓解或者在一定程度上解决恶意爬虫的问题。

3.1 应对正常爬虫

为了 SEO 的效果我们有时还需要给爬虫提供一些帮忙,以下为一些常见的措施:

  • 设置robots.txt文件:通过设置robots.txt文件,可以指导合规爬虫遵循规则,限制其访问特定目录或页面。这有助于减轻服务器负担,同时允许搜索引擎等合规爬虫正常抓取数据。

  • 限制爬虫抓取速度或增加服务器:在robots.txt文件中设置 Crawl-delay 参数,来控制爬虫抓取速度。这有助于降低服务器压力,确保网站正常运行。当然,我们也可以不限制其速度,通过增加服务器等措施提供更好的爬取体现。

  • 为爬虫提供 Sitemap:提供 Sitemap 文件,列出网站的所有页面 URL,帮助爬虫更高效、准确地抓取网站内容。这有助于提高网站在搜索引擎中的排名。

  • 优化网站结构:确保网站的链接结构清晰、合理,有助于爬虫更容易地抓取到所有页面。同时,遵循良好的 SEO 实践,提高网站在搜索引擎中的表现。

  • 监控服务器日志:定期检查服务器日志,分析爬虫的抓取行为,确保它们遵循 robots.txt 规则。如果发现不遵循规则的爬虫,可以采取相应的措施限制其访问。

  • 与爬虫开发者和维护者沟通:如果发现爬虫存在问题或给网站带来压力,可以尝试与爬虫开发者和维护者进行沟通,寻求合作解决问题。如网站提供的数据有较大需求,可以考虑为爬虫提供 API 接口。这有助于减轻服务器压力,同时提供更为规范、易于维护的数据访问方式。

  • 使用CDN服务:采用内容分发网络(CDN)服务,可以有效分散流量,降低单个服务器的压力。提升爬虫的爬取体验。

3.2 应对恶意爬虫

恶意爬虫的出发点是利用非法手段获取利益或损害他人利益。主要源于网络攻击者、竞争对手等方面的需求,以获取敏感信息、窃取知识产权或增加目标网站的运营压力等等。

为应对恶意爬虫,我们有如下一些常见的策略或方法来应对。

  • 限制请求频率:监控来自单个 IP 地址的请求频率。如果请求频率过高,可能是恶意爬虫。可以限制该 IP 地址的访问速度,或者暂时封锁它,以防止恶意抓取。频率限制中可以是分钟限,时限或日限。

  • 检查 User-Agent:检查请求的 User-Agent 字段,以识别恶意爬虫。某些恶意爬虫可能会使用非标准或可疑的 User-Agent。可以设置规则,要求访问者使用合法的浏览器 User-Agent。这块很常见,最开始的对抗中用这种方案比较容易见效,但是很快就可能破解。

  • 使用 Cookie 和 Session:通过使用 Cookie 和 Session 机制,可以跟踪访问者的行为。恶意爬虫可能在短时间内访问大量页面,而正常用户的访问模式通常不同。可以通过分析访问模式来识别并阻止恶意爬虫。其本质上的逻辑是区分正常用户和爬虫以及增加爬虫抓取数据的难度。通常情况下,正常用户访问网站时,服务端会为其生成一个唯一的 Session,并将 Session ID 存储在用户浏览器的 Cookie 中。当用户再次访问网站时,浏览器会将 Cookie 中的 Session ID 发送给服务端,以便服务端识别用户。而爬虫程序通常不会像浏览器那样自动处理 Cookie,因此通过检查请求中是否包含有效的 Cookie 和 Session ID,可以在一定程度上区分正常用户和爬虫。当然,对于恶意爬虫来说,可以绕过 Cookie 和 Session 的检测,此时就需要模拟浏览器的行为,包括处理 Cookie、维护 Session 等,这就大大增加了爬虫编写和运行的复杂性。此外,服务端还可以对 Cookie 和 Session 进行加密、设置过期时间等,做一些策略或措施,进一步提高爬虫绕过检测的难度。

  • 启用验证码:对于敏感操作或疑似恶意爬虫的访问,可以要求用户输入验证码(如 Google 的 reCAPTCHA)。这有助于阻止自动化的爬虫访问,但可能会对正常用户造成一定的不便。在检测到访问频率异常、异常访问行为、IP黑名单或者一些敏感操作、写操作时,可以启用验证码,此时我们需要权衡安全性和用户体验之间的平衡,网站应根据实际情况选择合适的启用验证码的时机,以尽量减少对用户的打扰。另外,在实施验证码方案时,考虑用户友好性。例如,确保验证码易于阅读和理解,同时提供无障碍访问选项(如语音验证码或替代验证方法),以满足不同用户的需求。

  • 动态加载内容:使用前端技术动态加载页面内容,使得恶意爬虫更难抓取数据。这种方法可能会影响网站的可访问性和 SEO,因此需要权衡后决策。

  • 保护 API:如果网站提供 API,可以对其添加额外的安全措施,如使用 API 密钥、限制请求速率和使用 OAuth 等身份验证机制。

  • 监控日志和异常行为:定期检查服务器日志,以发现异常访问模式,这有助于及时识别并应对恶意爬虫。最好有成体系的机制来保证,或者基于这些日志做一些监控告警,以系统化的方式更快的发现问题。

  • 采用 Web 应用防火墙(WAF):当前面的一些简单策略不行,此时如果你正在使用云服务,可以使用 Web 应用防火墙(WAF)帮助识别和阻止恶意流量。Web 应用防火墙(Web Application Firewall,简称 WAF)是一种保护 Web 应用程序免受恶意攻击和其他安全威胁的解决方案。WAF 位于 Web 应用程序和互联网之间,它监视、过滤或阻止传入 Web 应用程序的 HTTP 流量。WAF 的核心功能是识别并阻止来自外部攻击者的恶意请求,从而保护 Web 应用程序的安全。

WAF 可以提供如下一些方法,以帮助识别和阻止恶意爬虫,从而保护 Web 应用程序和数据。

  • IP 地址筛选:WAF 可以通过识别和阻止来自已知恶意 IP 地址的请求来应对恶意爬虫。咱们可以维护一个恶意 IP 地址的黑名单,并将其添加到 WAF 的访问控制列表中,以阻止这些 IP 地址的请求。

  • 请求速率限制:WAF 可以限制特定 IP 地址或客户端在给定时间段内发出的请求数量,从而防止爬虫对您的 Web 应用程序发起过多的请求。通过设置合理的速率限制,可以在不影响正常用户访问的情况下,抵御恶意爬虫的攻击。

  • 请求头分析:WAF 可以分析 HTTP 请求头中的信息(如 User-Agent、Referer 等),以识别和阻止恶意爬虫。恶意爬虫通常使用特定的 User-Agent 字符串或发送不包含 Referer 的请求。您可以根据这些特征创建 WAF 规则,以阻止这些请求。

  • 请求异常检测:WAF 可以检测到异常请求,如请求频率异常、请求路径异常或请求参数异常等。一旦检测到异常请求,WAF 可以采取相应的措施,如阻止请求、要求输入验证码或增加请求延迟等。

  • 自定义 WAF 规则:咱们可以根据 Web 应用程序和业务需求创建自定义 WAF 规则,以更有效地识别和阻止恶意爬虫。例如,咱们可以创建规则来检测特定的攻击模式、请求路径或查询参数等。

  • 机器学习和行为分析:一些高级的 WAF 解决方案采用了机器学习和行为分析技术,以更准确地识别恶意爬虫。通过分析大量的请求数据,机器学习模型可以自动识别异常行为并更新 WAF 规则,从而更有效地阻止恶意爬虫。

  • 集成第三方服务:WAF 可以与其他安全服务和解决方案集成,以提高对恶意爬虫的防护能力。例如,您可以集成 IP 信誉数据库、威胁情报平台或验证码服务等,以提高 WAF 的效果。

WAF 的策略和我们前面讲的策略区别不大,只不过依赖于其背后的研发能力、资源和大样本量,能够发现更多的异常情况,有更多的策略和方法来识别,并且只需要投入少量的研发人力做自定义规则配置。

4 更有挑战的爬虫

爬虫也是在不断演化和发展的,现在的爬虫技术面临的问题或研究的方向可能有如下的一些:

  • 智能爬虫:随着网页结构和内容的日益复杂,智能爬虫技术成为一个研究热点。智能爬虫可以自动识别网页内容,理解结构化和非结构化数据,以更高效和准确地获取有价值的信息。这里是否可以结合最近的大模型来做一些工作?

  • 反爬虫策略和反反爬虫技术:许多网站采用反爬虫策略防止数据被抓取。研究者关注如何在尊重网站隐私和合规的前提下,开发更有效的反反爬虫技术,实现对网页内容的友好抓取。

  • 增量爬取和实时抓取:随着互联网信息的快速更新,增量爬取和实时抓取成为爬虫研究的重要方向。研究者试图通过优化爬取策略、调度算法、抓取频率等,实现更高效的增量爬取和实时抓取。

  • 分布式爬虫和大规模数据抓取:为应对大规模数据抓取的挑战,研究者关注分布式爬虫技术的优化和发展。分布式爬虫可以在多台计算机上并行运行,提高抓取速度和效率,降低单点故障的风险。

  • 深度网络爬虫:深度网络爬虫是指能够抓取隐藏在表单、登录、动态内容等复杂场景下的数据。研究者关注如何使用机器学习、自然语言处理等技术,提高深度网络爬虫的抓取能力和准确性。

  • 语义爬虫:语义爬虫关注如何从网页中自动抽取结构化数据和语义信息。通过使用知识图谱、本体建模等技术,语义爬虫可以更好地理解和表示网页内容,为语义搜索、智能问答等应用提供支持。

  • 针对特定领域的爬虫研究:不同领域的网站具有特定的结构和内容特征。研究者关注如何针对特定领域(如电子商务、社交媒体、学术研究等)设计和优化爬虫技术,以更好地满足不同场景下的数据抓取需求。

对于现在的搜索引擎来说,这些应该都是在一定程度上解决了的问题,或者正在解决和优化的问题,为了其业务的发展,他们致力于发展更高效、智能、可扩展的爬虫技术,以应对互联网信息获取和分析的日益复杂需求。

Guess you like

Origin juejin.im/post/7250456016294543421