讲师中心 微信公众号
AI工具推荐 视频效率加速

ThinkPHP抓取页面新手入门第一课:从安装到完成首次采集【教程】

冬瑶姑娘_9479

冬瑶姑娘_9479

发布时间:2026-06-03 06:45:19

|

229人浏览过

|

来源于php中文网

原创

本文教你从零搭建ThinkPHP采集环境并完成首次网页抓取:安装框架、验证服务、创建控制器、用cURL发HTTP请求、处理gzip压缩、正则提取标题,全程跳过理论直接跑通。

thinkphp抓取页面新手入门第一课:从安装到完成首次采集【教程】

想用ThinkPHP写一个网页采集脚本,但连框架都没装好、连第一个HTTP请求都发不出去?这篇文章带你从零开始,跳过所有冗余概念,直接完成一次真实页面的抓取——不讲MVC原理,不画架构图,只做能跑通的事。

安装ThinkPHP并验证环境

打开终端(Windows用PowerShell或CMD,macOS/Linux用Terminal),确保已安装PHP 7.4+和Composer。

执行命令创建项目:composer create-project topthink/think tp-crawl。这一步会自动下载框架、解析依赖、初始化目录结构,耗时约15~60秒,取决于网络。

进入项目目录:cd tp-crawl。

立即学习“PHP免费学习笔记(深入)”;

启动内置服务器:php think run。如果终端输出Swoole server started或监听在http://127.0.0.1:8000,说明环境就绪;若报错command not found: php,请先配置系统PATH指向PHP可执行文件。

浏览器访问http://127.0.0.1:8000,看到ThinkPHP欢迎页即为成功。【注意:不要跳过这步验证,很多后续采集失败源于基础环境未就绪】

创建采集专用控制器

在app/controller目录下新建文件Crawl.php,内容如下:

<?php<br>namespace app\controller;<br>use think\Controller;<br>class Crawl extends Controller<br>{<br>    public function index()<br>    {<br>        return '采集模块已激活';<br>    }<br>}

保存后,在浏览器访问http://127.0.0.1:8000/crawl,应显示“采集模块已激活”。这证明控制器注册成功,路由已生效。

若返回404,请检查文件名是否为Crawl.php(首字母大写)、类名是否为Crawl、命名空间是否为app\controller——三者必须严格一致,ThinkPHP对大小写敏感。

发起首次HTTP请求(不带gzip)

修改app/controller/Crawl.php中的index()方法:

第一步:引入Curl类支持:use think\Http;(加在use think\Controller;下方)

第二步:替换return语句为:

$response = Http::get('https://httpbin.org/get');<br>return json(['status' => 'success', 'body' => $response->getBody()->getContents()]);

btpanel phpsite 宝塔面板PHP网站
btpanel phpsite 宝塔面板PHP网站

宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理

下载

这行代码会向测试接口发起GET请求,并把原始响应体转为JSON返回。访问http://127.0.0.1:8000/crawl,你将看到包含origin、headers等字段的JSON数据。

若报错Class 'think\Http' not found,说明你使用的是TP6.1+版本——该版本已移除think\Http,需改用think\facade\Http,或直接使用原生cURL。此处采用兼容写法:$ch = curl_init('https://httpbin.org/get'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); curl_close($ch); return json(['raw' => $data]);

处理gzip压缩页面(安居客/知乎等常见场景)

很多目标网站(如安居客列表页)默认启用gzip压缩,直接用file_get_contents或基础cURL会返回乱码二进制数据。必须显式声明接受gzip编码。

方法一:使用ThinkPHP 6.1+内置Http门面(推荐)

$response = \think\facade\Http::withHeaders(['Accept-Encoding' => 'gzip'])->get('https://httpbin.org/gzip');

方法二:手写兼容cURL函数(适用于所有TP版本)

在app/controller/Crawl.php顶部class Crawl extends Controller上方添加:

function https_request($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); $data = curl_exec($ch); curl_close($ch); return $data; }

然后在index()中调用:$html = https_request('https://httpbin.org/gzip');。此时$html是解压后的明文字符串,可安全用于后续正则或DOM解析。

【关键点:CURLOPT_ENCODING必须设为'gzip',不能写成'gzip,deflate'或留空,否则部分服务器仍返回压缩流】

用正则提取标题文本(最小可行采集)

现在我们抓取一个真实页面:https://httpbin.org/html。它返回一段含<h1>Herman Melville</h1>的HTML。

在index()方法中追加:

$html = https_request('https://httpbin.org/html');<br>$pattern = '/<h1>(.*?)<\/h1>/i';<br>preg_match($pattern, $html, $matches);<br>return $matches[1] ?? '未匹配到标题';

刷新http://127.0.0.1:8000/crawl,页面将直接显示Herman Melville。

这行正则/<h1>(.*?)<\/h1>/i中,?表示非贪婪匹配,避免跨标签捕获;i标志忽略大小写;$matches[1]取第一个子模式内容——漏掉[1]会返回整个匹配串,包含<h1>标签本身。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

10184

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

6021

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2095

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

3788

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

4474

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

3511

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

5017

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

3922

2023.11.13

FrankenPHP集成Laravel详细教程
FrankenPHP集成Laravel详细教程

本专题提供FrankenPHP集成Laravel的详细配置指南,全面解析运行原理、开发环境搭建、Caddyfile配置、Octane工作模式、数据库连接、队列任务、定时任务和生产环境优化,解决部署过程中常见的报错与兼容性问题。

0

2026.10.08

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn