当前位置:首页 > PHP

php 爬虫实现

2026-01-29 13:44:43PHP

PHP 爬虫实现方法

使用 cURL 获取网页内容

cURL 是 PHP 中用于发送 HTTP 请求的强大工具,适用于抓取网页内容。以下是一个基本示例:

$url = "https://example.com";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;

解析 HTML 内容

使用 DOMDocument 或 SimpleHTMLDom 解析 HTML 内容,提取所需数据:

$dom = new DOMDocument();
@$dom->loadHTML($response);
$xpath = new DOMXPath($dom);
$titles = $xpath->query("//h1");
foreach ($titles as $title) {
    echo $title->nodeValue . "\n";
}

处理 JavaScript 渲染的页面

对于动态加载的内容,可使用无头浏览器工具如 Puppeteer 的 PHP 封装(例如 ChromePHP):

use HeadlessChromium\BrowserFactory;
$browserFactory = new BrowserFactory();
$browser = $browserFactory->createBrowser();
$page = $browser->createPage();
$page->navigate('https://example.com')->waitForNavigation();
$html = $page->getHtml();
$browser->close();

处理分页和链接

自动遍历分页或链接时,需递归或循环处理:

$baseUrl = "https://example.com/page/";
for ($i = 1; $i <= 5; $i++) {
    $pageUrl = $baseUrl . $i;
    // 抓取并处理每页内容
}

数据存储

将抓取的数据保存到数据库或文件:

// 存储到 CSV
$file = fopen('data.csv', 'w');
fputcsv($file, ['Title', 'URL']);
foreach ($data as $item) {
    fputcsv($file, [$item['title'], $item['url']]);
}
fclose($file);

遵守 robots.txt

检查目标网站的 robots.txt,避免爬取禁止的页面:

$robotsUrl = "https://example.com/robots.txt";
$robotsContent = file_get_contents($robotsUrl);
if (strpos($robotsContent, 'Disallow: /private/') !== false) {
    // 跳过禁止爬取的路径
}

设置延迟和代理

避免被封禁,需设置请求间隔和使用代理:

curl_setopt($ch, CURLOPT_PROXY, 'proxy.example.com:8080');
sleep(2); // 延迟 2 秒

异常处理

添加错误处理逻辑,应对网络问题或解析失败:

php 爬虫实现

try {
    $response = curl_exec($ch);
    if ($response === false) {
        throw new Exception(curl_error($ch));
    }
} catch (Exception $e) {
    echo "Error: " . $e->getMessage();
}

标签: 爬虫php
分享给朋友:

相关文章

php实现搜索功能

php实现搜索功能

实现基本的搜索功能 在PHP中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('loc…

php如何实现直播

php如何实现直播

实现直播功能的方法 PHP可以通过结合其他技术和工具来实现直播功能。以下是几种常见的方法: 使用流媒体服务器 配置流媒体服务器如Nginx-RTMP、Red5或Wowza。这些服务器支持RTMP协…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

php实现的分页

php实现的分页

PHP 实现分页的方法 基本分页逻辑 分页的核心在于计算总页数、当前页码以及数据偏移量。假设每页显示 10 条数据: $current_page = isset($_GET['page']) ? (…

php 函数实现

php 函数实现

PHP 函数实现基础 PHP 函数的定义使用 function 关键字,后跟函数名和参数列表。函数名不区分大小写,但建议保持一致。 function functionName($param1, $p…

php 实现类

php 实现类

PHP 类的基本实现 在 PHP 中,类通过 class 关键字定义,后跟类名和一对花括号。类名通常遵循大驼峰命名法(如 ClassName)。以下是基本语法: class ClassName {…