爬取网站并不是一件容易的事,尤其是当您开始以数千或数百万个请求进行爬取时,您的服务器将开始受到影响并被阻止。

您可能知道,Crawlbase(以前的 ProxyCrawl)可以帮助您避免这种情况,但在本文中,我们不会讨论这个问题,而是要检查如何轻松抓取和抓取任何网站。

这是一个动手教程,因此如果您想学习它,请确保您在 Crawlbase(以前称为 ProxyCrawl)中有一个工作帐户。 它是免费的,所以继续吧 在这里创建一个。

提取 URL

在 Crawlbase(以前的 ProxyCrawl)中注册时,您会注意到的第一件事是我们没有任何花哨的界面,您可以在其中添加要抓取的 URL。 不,因为我们希望您拥有完全的自由。 因此,我们创建了一个您可以调用的 API。

因此,假设我们要在今天的日期在 Amazon.com 上抓取和抓取 iPhone X 的信息,这将是产品 URL: https://www.amazon.com/Apple-iPhone-Fully-Unlocked-5-8/dp/B075QN8NDH/ref=sr_1_6?s=wireless&ie=UTF8&sr=1-6

抓取亚马逊页面

我们如何从爬虫库中安全地爬取亚马逊?

我们将首先前往 我的帐户 我们将在其中找到两个令牌、常规令牌和 javascript 令牌的页面。

亚马逊网站不是用 javascript 生成的,这意味着它不是在客户端创建的,就像一些用 React 或 Vue 构建的网站一样。 因此,我们将使用常规令牌。

对于本教程,我们将使用以下演示令牌: caA53amvjJ24 但如果您正在学习本教程,请确保从 我的帐户 页面上发布服务提醒。

Amazon URL 有一些特殊字符,所以我们必须确保正确编码它,例如,如果我们使用 Ruby,我们可以执行以下操作:

1
2
要求 'cgi'
CGI。逃脱("https://www.amazon.com/Apple-iPhone-Fully-Unlocked-5-8/dp/B075QN8NDH/ref=sr_1_6?s=wireless&ie=UTF8&sr=1-6")

这将返回以下内容:

1
https%3A%2F%2Fwww.amazon.com%2FApple-iPhone-Fully-Unlocked-5-8%2Fdp%2FB075QN8NDH%2Fref%3Dsr_1_6%3Fs%3Dwireless%26ie%3DUTF8%26sr%3D1-6

伟大的! 我们已经准备好使用 Crawlbase(以前的 ProxyCrawl)抓取我们的 URL。

抓取内容

接下来我们要做的就是提出实际的请求。

Crawlbase(以前的 ProxyCrawl)API 将在这方面为我们提供帮助。 我们只需要向以下 URL 发出请求: https://api.crawlbase.com/?token=YOUR_TOKEN&url=THE_URL

因此,我们只需将 YOUR_TOKEN 替换为我们的令牌(用于演示目的为 caA53amvjJ24)和我们刚刚编码的 URL 的 THE_URL。

让我们用红宝石来做吧!

1
2
3
4
5
6
要求 '网络/http'
乌里= 的URI('https://api.crawlbase.com/?token=caA53amvjJ24&url=https%3A%2F%2Fwww.amazon.com%2FApple-iPhone-Fully-Unlocked-5-8%2Fdp%2FB075QN8NDH%2Fref%3Dsr_1_6%3Fs%3Dwireless%26ie%3DUTF8%26qid%3D1522316288%26sr%3D1-6')
响应 = 净::HTTP.get_response(uri)
回复['原始状态']
回复['pc_status']
响应体

完毕。 我们已经通过 Crawlbase(以前的 ProxyCrawl)向亚马逊提出了第一个请求。 安全、匿名且不会被阻止!

现在我们应该得到来自亚马逊的 html,如果应该看起来像这样:

1
2
3
4
5

var aPageStart = (new Date()).getTime();
var ue_t0=ue_t0||+new Date();

...

抓取网站内容

所以现在只缺少一个提取实际内容的部分。

这可以通过一百万种不同的方式完成,并且始终取决于您正在编程的语言。 我们始终建议使用现有的众多可用库之一。

这里有一些可以帮助您使用返回的 HTML 进行抓取的部分:

用 Ruby 刮擦

使用节点抓取

用 Python 抓取

我们希望你喜欢这个教程,我们希望很快见到你 Crawlbase(以前的 ProxyCrawl). 快乐爬行!