一、🌈什么是通用爬虫
通用爬虫(General Purpose Web Crawler或Scalable Web Crawler)是一种网络爬虫,其设计目标是对整个互联网或尽可能广泛的网络空间进行数据抓取。通用爬虫主要用于搜索引擎构建其庞大的网页索引数据库,从互联网中自动爬取、下载网页内容,形成网页的海量集合,以便后续对这些数据进行索引、存储和搜索。
通用网络爬虫是搜索引擎抓取系统(Baidu、Google、Yahoo等)重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。
通用搜索引擎(Search Engine)工作原理
通用网络爬虫从互联网中搜集网页,采集信息,这些网页信息用于为搜索引擎建立索引从而提供支持,它决定着整个引擎系统的内容是否丰富,信息是否即时,因此其性能的优劣直接影响着搜索引擎的效果。
二、🌈特点
- 全面性:起始点通常是少数几个种子URL,然后通过跟踪网页上的超链接逐渐扩展到整个互联网。
- 大规模:能够处理数以亿计的网页,并持续不断地更新和增加新的网页数据。
- 高效性:采用高效的爬取策略,例如广度优先搜索、深度优先搜索或是更复杂的启发式算法,以最合理的方式遍历互联网。
- 自我更新:定期重新抓取网页以更新索引内容,对于高权重或频繁更新的网站可能会更频繁地抓取。
- 策略调整:根据网站的robots.txt协议以及爬虫道德规范,控制抓取速度和频率,避免给网站服务器带来过大压力。
- 分布式架构:由于要处理的数据量极其庞大,往往采用分布式计算架构,实现多线程或多机并行爬取。
搜索引擎网络爬虫的基本工作流程如下:
- 首先选取一部分的种子URL,将这些URL放入待抓取URl队列;
- 取出待抓取URL,解析DNS得到主机IP,并将URL对应的网页下载下来,存储进已下载网页中,并将这些URL放进抓取URL队列
- 分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓取URL队列,从而进入下一个循环……
搜索引擎如何获取一个新网站的URL:
- 新网站向搜索引擎主动提交网址:(如百度http://zhanzhang.baidu.com/linksubmit/url)
- 在其他网站上设置新网站外链(尽可能处于搜索引擎爬虫爬取范围)
- 搜索引擎和DNS解析服务商(如:DNSpod等)合作,新网站域名将被迅速抓取。
三、🌈步骤
-
定义抓取目标与范围:
- 明确爬虫的目的,即需要从哪些网站或什么样的网页中获取什么类型的数据。
- 设定抓取的深度限制,比如是否仅抓取特定层级的链接,还是全网爬取。
-
制定抓取策略:
- 确定爬虫的起始URL列表,也就是所谓的“种子”URL。
- 制定URL发现规则,比如通过HTML中的
<a>
标签提取链接,或者根据网站的结构决定抓取路径。 - 设定抓取频率、延迟以及其他策略,以遵守网站的robots.txt协议和尊重网站服务器的资源。
-
发送HTTP请求:
- 使用HTTP客户端库(如Python的Requests库)向目标URL发送GET或POST请求。
- 根据需要配置请求头,模拟浏览器行为,包括User-Agent、Cookies、Referer等,以降低被目标网站识别为爬虫的风险。
- 可能还需要使用代理IP或其他手段来绕过访问限制。
-
接收和解析响应:
- 接收服务器返回的HTTP响应,获取网页内容。
- 使用HTML或XML解析器(如BeautifulSoup、lxml、PyQuery或基于DOM的解析方式)解析网页结构。
- 对于非HTML内容,可能需要相应的内容解析方法,如JSON、XML等。
-
提取数据:
- 根据预先设定好的规则,从网页内容中提取有用数据,例如文本、图片、链接或者其他特定元素。
- 可能需要用到CSS选择器、XPath或其他模式匹配技术。
-
URL管理与调度:
- 将解析得到的新URL添加到URL队列中,等待爬取。
- 实现URL去重,避免爬取已访问过的网页。
- 根据策略从队列中取出URL进行下一步抓取。
-
数据存储:
- 将爬取的数据储存到本地文件、数据库或者云端存储服务。
- 数据可能需要清洗、转换或结构化以便后续分析和使用。
-
监控与终止条件:
- 设置适当的爬虫运行监控,包括错误处理、性能监控及资源占用情况。
- 定义停止抓取的条件,比如达到预定抓取数量、抓取时间限制、磁盘空间不足等。
-
循环迭代:
- 持续从URL队列中获取新的URL进行抓取,直至满足停止条件。