怎么用PHP写爬虫?PHP爬虫入门简单实现方法有哪些

来源:Python编程网作者:越南程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《怎么用PHP写爬虫?PHP爬虫入门简单实现方法有哪些》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《怎么用PHP写爬虫?PHP爬虫入门简单实现方法有哪些》有用,将其分享出去将是对创作者最好的鼓励。

PHP爬虫的核心逻辑是模拟浏览器向目标网页发送请求,获取网页的HTML源码后,再通过字符串处理或者正则匹配的方式提取需要的内容。整个过程不需要复杂的框架,利用PHP的基础功能就能完成简单的爬虫开发。

怎么用PHP写爬虫?PHP爬虫入门简单实现方法有哪些

PHP爬虫的基础准备

在编写PHP爬虫之前,需要确认当前环境满足以下条件:首先PHP版本建议在5.6及以上,其次如果需要使用curl扩展,要确认php.ini中已经开启了curl模块,同时如果要抓取https协议的网页,还需要开启openssl扩展。如果是本地开发环境,比如使用集成环境phpstudy,一般这些扩展都是默认开启的,不需要额外配置。

使用file_get_contents实现简单爬虫

file_get_contents是PHP内置的函数,可以直接读取文件或者网络资源的内容,使用它实现爬虫非常简单,只需要一行代码就能获取目标网页的源码。不过这种方式功能比较有限,不支持设置请求头、处理cookie等复杂操作,适合抓取没有反爬机制的静态网页。

基础抓取示例

下面是使用file_getcontents抓取网页内容的示例代码:

<?php
// 目标网页地址,这里使用ipipp.com的示例页面
$url = 'https://ipipp.com/example.html';
// 使用file_get_contents获取网页源码
$html = file_get_contents($url);
// 判断抓取是否成功
if ($html === false) {
    echo '抓取网页失败';
} else {
    echo '抓取到的网页长度:' . strlen($html) . '字符';
    // 可以把抓取到的内容保存到本地文件
    file_put_contents('page.html', $html);
}
?>

提取目标数据

获取到网页源码之后,我们可以使用正则表达式提取需要的内容,比如提取网页中所有的标题标签内容:

<?php
$url = 'https://ipipp.com/example.html';
$html = file_get_contents($url);
if ($html) {
    // 正则匹配h1标签的内容
    preg_match_all('/<h1>(.*?)</h1>/', $html, $matches);
    if (!empty($matches[1])) {
        echo '提取到的h1标题:' . PHP_EOL;
        foreach ($matches[1] as $title) {
            echo $title . PHP_EOL;
        }
    } else {
        echo '未找到h1标题';
    }
}
?>

使用curl扩展实现更灵活的爬虫

curl是PHP中功能更强大的网络请求扩展,支持设置请求头、超时时间、代理、cookie等多种参数,能应对更多场景的网页抓取需求,是实际开发中更常用的爬虫实现方式。

curl基础抓取示例

下面是使用curl抓取网页内容的示例代码:

<?php
$url = 'https://ipipp.com/example.html';
// 初始化curl会话
$ch = curl_init();
// 设置请求的URL
curl_setopt($ch, CURLOPT_URL, $url);
// 设置返回结果不直接输出,而是保存到变量
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 设置超时时间,避免请求卡住
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
// 设置用户代理,模拟浏览器请求
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');
// 执行请求,获取返回结果
$html = curl_exec($ch);
// 获取请求的错误信息
$error = curl_error($ch);
// 关闭curl会话
curl_close($ch);
if ($error) {
    echo 'curl请求失败:' . $error;
} else {
    echo '抓取成功,网页长度:' . strlen($html) . '字符';
}
?>

curl处理带参数的请求

如果目标网页需要传递参数,比如搜索接口,可以使用curl设置POST参数:

<?php
$url = 'https://ipipp.com/search.php';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 设置请求为POST方式
curl_setopt($ch, CURLOPT_POST, 1);
// 设置POST参数
curl_setopt($ch, CURLOPT_POSTFIELDS, [
    'keyword' => 'PHP教程',
    'page' => 1
]);
$result = curl_exec($ch);
curl_close($ch);
if ($result) {
    echo '请求结果:' . $result;
}
?>

爬虫开发的注意事项

在编写PHP爬虫的时候,需要注意遵守相关的规则,避免给目标网站造成过大压力。首先要查看目标网站的robots.txt文件,确认允许抓取的目录范围,不要抓取禁止访问的内容。其次要控制请求频率,不要短时间内发送大量请求,可以在每次请求之后添加sleep函数暂停1到2秒。另外不要抓取网站的隐私数据或者受版权保护的内容,避免引发法律问题。如果是需要长期运行的大规模爬虫,还需要考虑反爬策略的应对,比如IP代理、请求头随机化等,但入门阶段先掌握基础实现即可。

完整示例:抓取列表页数据

下面是一个完整的示例,使用curl抓取列表页,提取所有文章标题和链接:

<?php
$url = 'https://ipipp.com/article_list.html';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
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_TIMEOUT, 10);
$html = curl_exec($ch);
curl_close($ch);
if ($html) {
    // 匹配文章标题和链接,假设列表项的结构是 <li><a href="链接">标题</a></li>
    preg_match_all('/<li><a href="(.*?)">(.*?)</a></li>/', $html, $matches);
    if (!empty($matches[1])) {
        echo '抓取到的文章列表:' . PHP_EOL;
        for ($i = 0; $i < count($matches[1]); $i++) {
            echo '标题:' . $matches[2][$i] . PHP_EOL;
            echo '链接:' . $matches[1][$i] . PHP_EOL;
            echo '--------' . PHP_EOL;
        }
    }
}
?>

PHP爬虫file_get_contentscurl正则表达式修改时间:2026-06-29 13:42:38

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。