Python调用墨迹天气API实践指南
使用 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_key | API 密钥用于通过 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脚本:
- 打开文件dfk-api.php
- 将 API-KEY 与 https://account.dataflowkit.com/settings 中的实际 API 密钥交换。在 https://dataflowkit.com 注册后可以免费获得
- 在终端中运行以下命令以构建 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 脚本,以发出请求以抓取各种网站。