所有文章 > 学习各类API > 使用 PHP 进行 Web 抓取的初学者指南
使用 PHP 进行 Web 抓取的初学者指南

使用 PHP 进行 Web 抓取的初学者指南

在现代编程语言中,从 Web 抓取简单的 HTML 不是问题。虽然 PHP 特别适合 Web 开发,但它发送 HTTP 请求的能力严重不足。PHP 开发人员的 Requests 库是向网站发送 HTTP 请求的绝佳解决方案。

有关web抓取推荐:

呈现 Javascript 网页。

仅仅使用像PHP Requests这样的库从网站下载内容是不够的。大多数现代网站都严重基于 Angular、React 或 Vue.js 等 Javascript 框架。我们可以谈谈客户端渲染,其中作为响应返回的 Javascript 内容需要在 Web 浏览器中渲染。主要是无头 Chrome 浏览器用于呈现来自网站的动态内容,并将其作为静态 HTML 返回。

使用代理。

另一个挑战是获取仅限于来自特定国家/地区的用户的网页内容。 需要使用代理服务器来获取目标网站的特定国家/地区版本或绕过内容下载限制。


在大多数情况下,运行您自己的无头 Chrome 浏览器集群和代理池的成本很高。使用特殊服务在
云中呈现 Javascript 驱动的网页,并返回静态 HTML 更有意义。

如何使用PHP脚本抓取网站?

我将为最近表现出浓厚兴趣的PHP开发人员分享代码。我们将生成调用 Web Scraping Service API 的简单 PHP 脚本。要自动执行 HTML 抓取任务,请按照以下步骤操作:

1. 获取免费的 API 密钥。

需要 Dataflow Kit API 密钥才能访问 Dataflow Kit API。服务器。免费注册后,您可以从用户仪表板获取它。一旦您注册,我们将免费授予您 1000 个积分。

转到 https://account.dataflowkit.com 并使用 Facebook/Google 登录或使用您的电子邮件注册。

单击“登录”按钮以使用您的Facebook或Google帐户进行注册。或按“注册”链接使用您的电子邮件进行注册。

您将需要授权对 Dataflow Kit API 的请求。稍后我们会将其添加到我们的 PHP 脚本中。请在仪表板设置中找到它。

2. 安装 PHP 请求。

这里有一个依赖关系。在运行最终脚本之前,请按照 https://github.com/rmccue/Requests 中的安装说明进行操作,并安装上述 PHP 请求包。

3. 生成PHP脚本并向API发送请求。

3.1. 转到 https://dataflowkit.com/html-scraping 。为 HTML Scraping API 代码生成器指定一些参数以生成 PHP 脚本。

参数描述
api_keyAPI 密钥用于通过 API 进行身份验证 – 您可以在帐户仪表板中找到它
网址提供用于下载内容的 URL。
代理选择一个国家/地区,通过位于那里的代理将请求传递到目标网站。
渲染 Javascript将其设置为“是”以呈现 Javascript 动态网页。对于静态 HTML 网页,请选择“否”。默认为“是”。
等待延迟为自定义延迟指定“等待延迟”参数(以秒为单位)。在初始页面加载后,留出更多时间来呈现网站的某些元素有时会有所帮助。
行动使用操作:输入、单击、等待、滚动,在渲染网页时自动执行手动工作流。它们模拟现实世界中人类与页面的交互。

根据指定的参数,您将获得如下信息:

<?php
include('vendor/rmccue/requests/library/Requests.php');
Requests::register_autoloader();
$headers = array(
'Content-Type' => 'application/json'
);
$url = 'https://dbconvert.com/';
$data = '{"url":"' . $url . '","type": "chrome","waitDelay": 0.5}';
$response = Requests::post('https://api.dataflowkit.com/v1/fetch?api_key=API-KEY', $headers, $data);
var_dump($response->body);
?>

用于访问 Dataflow Kit API 的 PHP 脚本。

3.2. 例如,将上述代码保存为“dfk-api.php”

3.3. 现在添加在 https://account.dataflowkit.com/settings 找到的实际 API Key 来代替 API-KEY。它看起来像“ab5cc2a84f7efab1693e8fc72he5f7e844b1bf5cbad9ea33”。请参阅步骤 #1。

3.4. 就这样。现在,您可以运行脚本并从任何网站获取呈现的 HTML 内容。

Docker 用户注意事项。

构建和运行 docker 镜像来运行脚本甚至更简单。

FROM php:7.4-cli
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y git
RUN git clone git://github.com/rmccue/Requests.git
COPY . /usr/src/dfk-api
RUN mv Requests /usr/src/dfk-api
WORKDIR /usr/src/dfk-api
CMD [ "php", "./dfk-api.php" ]

Dockerfile的

按照以下步骤构建并运行调用Dataflow Kit HTML抓取API服务的PHP脚本:

  1. 打开文件dfk-api.php
  2. 将 API-KEY 与 https://account.dataflowkit.com/settings 中的实际 API 密钥交换。在 https://dataflowkit.com 注册后可以免费获得
  3. 在终端中运行以下命令以构建 docker 镜像。
docker build -t dfk-api-php .

4. 在新容器中运行命令

docker run -it --rm --name dfk-api-php dfk-api-php

用于访问 Dataflow Kit API 的 PHP 代码的 Github 存储库。

随意在 https://github.com/slotix/dfk-api-php 处分叉 Github 存储库并根据您的需求自定义代码。

结论

对服务器生成的纯 HTML 网页进行 Web 抓取很简单。您可以使用“PHP Requests”库来获取 HTML 内容。

从动态生成的 Javascript 数据中抓取大量数据时,您可能会遇到以下问题:

  • 您需要运行无头 Chrome 浏览器的多个实例来处理大量输入。
  • 您必须通过代理池发送请求以避免阻塞。

同样,您可以创建PHP脚本以将网页保存为PDF或截取屏幕截图。

显然,在抓取网页之后的下一步是从呈现的 HTML 中提取特定数据。根据网站的不同,它可能是一个单独的 HTML 元素,如图像、文本、链接。或者,例如,电子商务网站将页面上的多个产品列为按某些模式分组的数据块

您可以使用专用页面上提供的其他 PHP 代码生成器来构建 PHP 脚本,以发出请求以抓取各种网站。

原文链接:https://dataflowkit.com/blog/php-api/

#你可能也喜欢这些API文章!