当前位置:首页 > PHP

php curl 实现爬虫

2026-02-16 12:59:57PHP

PHP cURL 实现爬虫的方法

使用 PHP 的 cURL 库可以高效地实现网页爬虫功能。以下是具体实现步骤和注意事项:

基本 cURL 请求

初始化 cURL 会话并获取网页内容:

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

设置用户代理

模拟浏览器访问避免被屏蔽:

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36');

处理重定向

自动跟随重定向:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);

设置超时时间

防止长时间等待:

curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);

处理 HTTPS

忽略 SSL 证书验证(测试用):

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

获取请求信息

获取详细请求信息:

$info = curl_getinfo($ch);
echo 'HTTP Code: ' . $info['http_code'];
echo 'Total Time: ' . $info['total_time'];

POST 请求示例

发送 POST 请求:

$postData = [
    'username' => 'test',
    'password' => '123456'
];
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);

处理 Cookie

保存和发送 Cookie:

curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');

处理压缩内容

自动解压 gzip 内容:

curl_setopt($ch, CURLOPT_ENCODING, 'gzip');

多线程处理

使用 curl_multi 实现并发请求:

$mh = curl_multi_init();
$handles = [];

for ($i = 0; $i < 5; $i++) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://example.com/page/$i");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_multi_add_handle($mh, $ch);
    $handles[] = $ch;
}

do {
    curl_multi_exec($mh, $running);
    curl_multi_select($mh);
} while ($running > 0);

foreach ($handles as $ch) {
    $content = curl_multi_getcontent($ch);
    // 处理内容
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch);
}

curl_multi_close($mh);

使用代理

设置代理服务器:

curl_setopt($ch, CURLOPT_PROXY, '127.0.0.1:8888');
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);

解析 HTML 内容

结合 DOMDocument 解析 HTML:

$dom = new DOMDocument();
@$dom->loadHTML($output);
$xpath = new DOMXPath($dom);
$titles = $xpath->query('//h1');
foreach ($titles as $title) {
    echo $title->nodeValue;
}

错误处理

检查 cURL 错误:

if (curl_errno($ch)) {
    echo 'cURL Error: ' . curl_error($ch);
}

性能优化建议

  • 复用 cURL 句柄减少连接开销
  • 合理设置并发数量避免被封禁
  • 使用缓存减少重复请求
  • 遵守 robots.txt 协议
  • 设置合理的请求间隔

完整示例代码

function fetchUrl($url) {
    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
        CURLOPT_TIMEOUT => 30,
        CURLOPT_CONNECTTIMEOUT => 10,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_ENCODING => 'gzip'
    ]);

    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        throw new Exception(curl_error($ch));
    }
    curl_close($ch);
    return $result;
}

try {
    $html = fetchUrl('https://example.com');
    // 处理获取的HTML内容
} catch (Exception $e) {
    echo 'Error: ' . $e->getMessage();
}

以上方法涵盖了 PHP cURL 实现爬虫的主要功能和技术要点,可根据实际需求进行调整和扩展。

php curl 实现爬虫

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

相关文章

php实现图片上传

php实现图片上传

实现图片上传的基本步骤 创建HTML表单用于文件上传,表单需设置enctype="multipart/form-data"属性,确保文件数据正确传输。 <form action="uploa…

git php实现

git php实现

Git 与 PHP 的集成实现 使用 PHP 执行 Git 命令 通过 PHP 的 exec()、shell_exec() 或 passthru() 函数可以直接调用 Git 命令,适用于服务器端操作…

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常…

php 登录实现

php 登录实现

PHP 登录实现 PHP 登录功能通常包括用户认证、会话管理和安全性措施。以下是实现 PHP 登录功能的关键步骤。 数据库准备 创建一个用户表存储用户信息,通常包括用户名、密码(加密存储)和其他必…

php 函数实现

php 函数实现

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

php 实现mvc

php 实现mvc

PHP 实现 MVC 架构的方法 MVC(Model-View-Controller)是一种常见的软件设计模式,用于分离业务逻辑、用户界面和用户输入。以下是 PHP 实现 MVC 架构的关键步骤:…