in

如何从网站上提取数据?— 初学者的指南

如何从一个网站上提取数据

网络正在成为一个令人难以置信的数据源。网上有越来越多的数据,从社交媒体和论坛上的用户生成的内容、电子商务网站、房地产网站或媒体机构……许多企业都建立在这些网络数据上,或高度依赖这些数据。

手动从网站上提取数据并复制/粘贴到电子表格是一个容易出错和耗时的过程。如果你需要爬取数以百万计的网页,就不可能手动操作,所以你应该将其自动化。

在这篇文章中,我们将看到如何通过许多不同的解决方案从网站获取数据。从网络上提取数据的最佳方式取决于以下几点。

  • 你是技术人员吗?
  • 你有内部开发人员吗?
  • 你需要从什么类型的网站中提取数据?
  • 你的预算是多少?

从在内部建立你的网页爬取管道,到网页爬取框架和无代码网页爬取工具,要知道从什么开始做并不是一件容易的事。

在深入研究如何从网络上提取数据之前,让我们看看不同的网页爬取用例。


网页爬取有哪些不同的使用情况?

这里有一些有趣的网页爬取用例。

  • 在线价格监测。许多零售商在网上监测市场,以便动态地改变他们的定价。他们监测他们的竞争对手的库存、价格变化、销售、新产品。
  • 房地产。很多房地产初创公司都需要来自房地产列表的数据。这也是市场研究的一个金矿。
  • 新闻聚合。新闻网站大量报废,用于情绪分析,作为金融/对冲基金的替代数据…
  • 社交媒体。许多公司正在从社交媒体中提取数据来搜索信号。影响者营销机构正在通过观察影响者的粉丝增长和其他指标,从影响者那里获得洞察力。
  • 评论聚合。很多初创公司都在从事评论聚合业务和品牌管理。他们从许多不同的网站上提取关于餐馆、酒店、医生和企业的评论。
  • 潜在客户生成。当你有一个目标客户的网站名单时,收集他们的联系信息(电子邮件、电话号码……)用于你的推广活动,会很有趣。
  • 搜索引擎结果。监测搜索引擎结果页是SEO行业监测排名的关键。其他行业,如在线零售商也在监测电子商务搜索引擎,如谷歌购物,甚至像亚马逊这样的市场监测和改善他们的排名。

在我们使用ScrapingBee的经验中,这些是我们在客户那里看到最多的主要用例。当然,还有许多其他用例。


如何用代码从网上提取数据

在这一部分中,我们要看一下以编程方式(使用代码)提取数据的不同方法。如果你是一家科技公司或有内部开发人员,这通常是要走的路。

对于大型的网页爬取业务,自己编写网页爬取代码通常是你最经济和灵活的选择。有许多不同的技术和框架可用,这就是我们在这一部分要看的。

内部网页爬取管道

举个例子,假设你是一个价格监测服务,从许多不同的电子商务网站提取数据。

你的网页爬取堆栈可能包括以下内容。

  • 代理人
  • 无头浏览器
  • 提取规则(XPath和CSS选择器)。
  • 工作安排
  • 储存
  • 监测

代理人是任何网页爬取操作的核心部分。许多网站根据IP地址的国家显示不同的数据。例如,一个在线零售商将为欧盟境内的人显示欧元价格。一个美国网站将为在美国境内的美国人显示美元价格。根据你的服务器的位置和你想提取数据的目标网站,你可能需要另一个国家的代理。

另外,为了避免被第三方网站屏蔽,拥有一个庞大的代理池是必须的。有两种类型的代理,数据中心住宅代理。有些网站完全封锁数据中心IP,在这种情况下,你需要使用住宅IP地址来访问数据。然后还有一种混合类型的代理,它结合了两个世界的优点:ISP代理服务器

无头浏览器是现代网页爬取的另一个重要层面。现在有越来越多的网站使用闪亮的前端框架,如Vue.js、Angular.js、React.js。这些Javascript框架使用后端API来获取数据,并在客户端进行渲染来绘制DOM(文档对象模型)。如果你使用的是不渲染Javascript代码的普通HTTP客户端,你得到的页面几乎是空的。这就是为什么无头浏览器如此重要的原因之一。

使用无头浏览器的另一个好处是,许多网站都在使用 “Javascript挑战 “来检测HTTP客户端是机器人还是真实用户。通过使用无头浏览器,你更有可能绕过这些自动测试,获得目标HTML页面。

运行无头浏览器最常用的三个API是Selenium、Puppeteer和Playright。Selenium是最古老的一个,它有几乎所有编程语言的库,支持所有主要的浏览器。

Puppeteer只支持NodeJS,它由Google团队维护,支持Chrome(Firefox的支持将在以后出现,目前是实验性的)。

Playwright是最新的播放器,它由微软维护,支持所有主要浏览器。

提取规则是你为了选择HTML元素和提取数据而要使用的逻辑。在一个页面上选择HTML元素的两种最简单的方法是XPath选择器和CSS选择器

这通常是你的网页爬取管道的主要逻辑所在。它是你的开发人员最可能花时间的地方。网站经常更新他们的HTML(尤其是创业公司),所以你将经常要更新那些XPath和CSS选择器。

工作调度是另一个重要的部分。你可能想每天,或每周都监测价格。使用作业调度系统的另一个好处是,你可以重试失败的作业。错误处理在网页爬取中是极其重要的。许多错误可能发生在你的控制之外。请考虑以下情况。

  • 页面上的HTML已经改变,它破坏了你的提取规则
  • 目标网站可能出现故障。
  • 也有可能是你的代理服务器很慢或不工作。
  • 一个请求可以被阻止。

作业调度和错误处理可以使用任何形式的消息代理和作业调度库来完成,比如Ruby中的Sidekiq或Python中的RQ

存储。从一个网站上提取数据后,你一般要把它保存在某个地方。刮出的数据一般以下列常见格式存储。

  • JSON
  • CSV
  • XML
  • 进入SQL或noSQL数据库

监控你的网页爬取管道是非常重要的。如前所述,在大规模地从网络上提取数据时,会发生许多问题。你需要确保你的爬取器不发生故障,确保代理服务器正常工作。Splunk是一个分析日志、设置仪表盘和警报的伟大工具。也有一些开源的替代品,如Kibana和整个ELK栈。

Scrapy

Scrapy是一个开源的python网页爬取框架。在我们看来,它是一个了不起的起点,可以大规模地从网站上提取结构化数据。它以一种非常优雅的方式解决了许多常见的问题。

  • 并发性(同时爬取多个页面)。
  • 自动节流,以避免干扰你正在提取数据的第三方网站
  • 灵活的出口类型格式,CSV,JSON,XML和后端存储(亚马逊S3,FTP,谷歌云……)。
  • 自动爬行
  • 内置媒体管道,下载图像和资产

如果你想更深入地了解Scrapy,我们写了一份关于用Scrapy进行网页爬取的广泛指南。

ScrapingBee

ScrapingBee可以帮助你解决代理管理和无头浏览器的问题。当你不想处理这两个问题时,它是一个很好的解决方案。

在生产中运行无头浏览器有很多问题。在你的笔记本电脑上运行一个Selenium或Puppeteer实例很容易,但在生产中运行几十个实例则是另一种境界。首先,你需要强大的服务器。例如,无头的Chrome浏览器需要至少1GB的内存和一个CPU核心才能顺利运行。

想要并行运行50个无头的Chrome实例?那就是50GB的内存和50个CPU核心。那么,你要么需要一台巨大的裸机服务器,每月花费数千美元,要么需要许多小型服务器。

除此之外,你还需要一个负载平衡器,监控,并可能将所有这些都放入docker容器。这是一个很大的工作,这也是我们在ScrapingBee解决的问题之一。你可以通过简单的API调用来使用ScrapingBee,而不是做上述所有的事情。

ScrapingBee的另一个甜蜜点是代理管理。许多网站在其页面上使用IP速率限制。比方说,一个网站允许每个IP地址每天有10个请求。如果你需要在一天内执行100,000个请求,你将需要10,000个独特的代理。这是一个很大的数字。一般来说,代理供应商每月对每个独特的IP地址收费约1至3美元。账单可以很快爆炸。

使用ScrapingBee,您只需花很少的钱就可以访问一个巨大的代理池。


从网络上抓取数据而不需要代码/低代码

在ScrapingBee,我们热爱代码!但是,如果你的公司没有开发人员怎么办?还是有解决方案的一些解决方案是无代码的,另一些则需要少量的代码(API)。 如果你需要一次性项目的数据,而不是经常性的,这就特别有效。

数据经纪人

如果你需要从网络上获得大量的数据用于一个特定的使用案例,你可能想检查一下这个数据集是否已经存在。例如,假设你想要世界上所有使用某种特定技术(如Shopify)的网站的列表。你可以通过购买数据经纪人(如buildwith.com)来轻松获得这个列表。

针对网站的API

如果你需要从一个特定的网站(相对于许多不同的网站)提取数据,可能会有一个现有的API供你使用。 例如,在ScrapingBee,有一个专门的Google Search API。使用API的好处是,当目标网站更新其HTML时,你不需要处理维护问题。这意味着你不需要监控,不需要再进行提取规则的更新,也不需要处理代理机构一直被屏蔽的问题。

此外,确保目标网站没有提供公共或私人的API来访问数据,这通常是具有成本效益的,你将花费更少的时间来尝试自己拉动数据。

网络浏览器扩展

网络浏览器扩展可以是一种从网站上提取数据的有效方式。当你想提取格式良好的数据,例如一个表格或一个页面上的元素列表时,就会有甜头。 一些扩展,如DataMiner,为亚马逊、Ebay或Wallmart等流行网站提供了现成的爬取配方。

网页爬取工具

像ScreamingFrog或ScrapeBox这样的网页爬取工具对于从网络上提取数据是非常好的,具体来说就是谷歌。根据你的使用情况,如搜索引擎优化、关键词研究或寻找破损的链接,这可能是最容易使用的东西。

其他像ParseHub这样的软件也非常适合没有编码知识的人。那些是桌面应用程序,使从网络上提取数据成为一项简单的任务。你在应用程序上创建指令,如选择你需要的元素,滚动等。

虽然这些软件有局限性,而且学习曲线很陡峭。

外包给网页爬取机构或自由职业者

有许多网页爬取机构和自由职业者可以帮助你满足你的网络数据提取需求。当你的问题无法通过无代码解决方案解决时,外包是很好的选择。

自由职业者是最灵活的解决方案,因为他们的代码可以适应任何网站。输出的格式可以是你能想到的任何东西。CSV、JSON、将数据转入SQL数据库……

寻找自由职业者的最简单方法是上Upwork.comToptal

网页爬取机构是另一个很好的解决方案,特别是对于大规模的爬取操作。如果你需要为许多网站开发和维护爬取器,你可能需要一个团队,一个自由职业者不可能处理所有的事情。


最后的想法

这是一篇很长的博文,你现在应该对从网络上提取数据的不同方式有了充分的了解。如果你仍然不确定选择什么,请记住,我们在这个页面上讨论的许多东西都是容易和快速测试的。

如果你想了解更多用代码构建自己的爬虫,你可能会对这些指南感兴趣:

blank

Written by 爬取 大师

阿里P12级别选手,能够突破各种反爬, 全能的爬取大师,擅长百万级的数据抓取!没有不能爬,只有你不敢想,有爬取项目可以联系我邮箱 [email protected] (带需求和预算哈, 不然多半不回复)