电商网站的大规模网页抓取
与小型项目相比,大规模的网页抓取带来了一系列截然不同的挑战,例如基础结构搭建、管理资源成本、绕过爬虫检测措施等。
本文将指导您完成大规模数据收集,并以电商领域为重点。
网页抓取基础设施
搭建和管理网页抓取基础结构是首要任务之一。当然,我们假设您已经建立了一个数据收集方法(又称爬虫)。
一般的网络抓取流程如下:
简而言之,您首先要抓取一些目标。对于大规模的操作,不用代理的抓取无法持续太久,因为很快就会被网站屏蔽。代理是大规模数据收集的重要元素。
大规模数据收集的最佳做法是采用多个代理解决方案,甚至是多个供应商。我们先从代理供应商说起。
Part 1 选择一个代理供应商
选择合适的代理供应商非常重要,因为这将直接影响抓取程序。
如果您选择合作的代理机构不靠谱,您的内部数据检索工具使用效果就不理想。
Part 2 选择一个代理类型
如果您只想找一种适用于电商数据收集的代理类型,请考虑住宅代理。这种代理因为其性质而不太可能被屏蔽,并提供了覆盖范围广的庞大代理池。
Part 3 绕过安全措施
电商网页都会部署一定的安全措施,用来阻止不受欢迎的爬虫。一些常用的方法如下:
●IP 识别。服务器可以分辨 IP 是来自数据中心还是住宅。
●CAPTCHA 验证码。这是一种问答式测试,通常要求用户填写正确的密码或识别图片中的物体。
●Cookie。普通用户很少直接进入某个特定产品页面。
●浏览器指纹识别。这指的是出于识别目的而收集的关于计算机设备的信息。
●标头。网站可以获悉用户的地理位置、时区、语言等。
●与自然用户行为不一致。
Part 4 关于存储的微妙艺术
您收集的所有数据都需要保存在某个地方,所以大规模的抓取自然需要大量的存储资源。
那么,当数据的接收速度与处理速度之间存在差异时,通常会使用缓冲器。
#为数据传输创建一个缓冲区
为了用通俗的语言解释缓冲,我们以办公室为例。假设您正坐在办公室里工作,不时有人过来在您的一堆文件中加入新的任务。您完成了正在进行的任务后,将转到下一个指定的任务。那么这堆文件就是一个缓冲区。如果堆得太高,就会翻倒,所以您必须限制里面的文件页数。这就是缓冲区的容量,只要超过这个限制就会溢出。 如果您在等待另一个服务来接受信息,就需要一个缓冲区来查看有多少信息正在传输。这样才能避免溢出,就像避免那堆文件翻倒一样。如果缓冲区溢出,您就不得不舍弃一些工作。在这种情况下,您可以有三种选择:
1. 舍弃最早存储在缓冲区的数据
2. 舍弃最新添加的数据
3. 停止数据收集过程以阻止溢出
然而,如果您选择停止抓取过程,那么有些工作就要延期完成,等到恢复正常后,就需要进行更多的抓取。
#数据库存储服务
如果您想处理传入数据并转换为可读的格式(如 JSON),应该怎么办?从这个角度来看,其实不需要原始数据。也就是说,您可以将信息保存在短期存储器内。那如果您需要 HTML 文件和处理后的数据,又该怎么办?长期存储器将是最佳选择。
不过,我们讨论的是大规模的数据收集,因此建议同时使用这两种方法。我们的推荐做法如下所示:
在这种情况下,由于短期存储器的运行速度非常快,可以处理大量的请求,因此将用于吸收抓取来的大量数据。通过这一解决方案,您既能将数据送入解析器,又能将未处理的 HTML 文件放入长期存储器。
您也可以只使用长期存储器作为缓冲区。但这样一来,您就需要投入更多的资源,以确保所有的进程都能按时完成。
以下是适用短期和长期存储器的一些服务:
1. 长期。MySQL、BigQuery、Cassandra、Hadoop 等。
这些解决方案通常以永久存储的方式(硬盘而不是内存/RAM)保存数据。因为信息预计会保留较长时间,所以这些解决方案配备了一些工具,可以从整个数据集中筛选出您需要的数据。
2. 短期。Apache Kafka、RabbitMQ、Redis 等
这些存储器在数据筛选方面的功能很有限,因此一般不适合长期保存数据。但另一方面,这些存储器运行速度极快,虽然牺牲了相当多的功能,但随时可用,从而可以实现大规模操作所需的性能。
当然,您也可以完全避免存储过程。我们提供的 Real-Time Crawler是专为高负荷数据检索操作定制的高级抓取器,尤其适用于抓取电商产品页面。它的好处之一在于,可以为您免除数据存储的烦恼,因为您只需要为它提供一个网址。Real-Time Crawler 自行完成整个抓取、存储和处理工作,返回给您的都是有用的数据(HTML 或 JSON)。
Part 5 处理抓取的数据
确定了存储需求后,就必须考虑如何处理,也就是解析。数据解析过程是指分析传入信息,并将相关片段提取为适用于后续处理的格式。数据解析是网页抓取中的一个关键步骤。
然而,就像我们到目前为止在这篇博文中讨论的所有内容一样,解析并不是那么简单。在小规模下,构建和维护解析器都是非常简单的。但是对于大规模的网页抓取而言,情况就复杂多了。
#大规模数据解析的难题
●目标网站可能会改变其网页布局
●使用第三方解析器时,进程可能被迫停止
●如果您使用第三方服务,就需要多个服务
●不同服务提供的数据集在结构上各不相同
●如果您使用自己的解析器,就需要大量解析器
●当解析器进程中止时,您的缓冲区可能会溢出
总而言之,您要么构建和维护自己的解析器,要么通过第三方解决方案获取解析器。对于大规模操作,我们建议您尝试上述两种方法中的任一种。将资源分散投资到多个优秀的第三方解决方案(使服务多样化),可以确保网页抓取操作顺利进行。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。