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

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

有关web抓取推荐:

  • 实时WEB抓取-scrapestack
  • ScrapeOwl 网页内容提取
  • 网页抓取-import.io

呈现 Javascript 网页。

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

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

<?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/