php curl抓取网页指定内容( 命令行下的cURL能做什么(本文)(组图))
优采云 发布时间: 2022-01-13 00:21php curl抓取网页指定内容(
命令行下的cURL能做什么(本文)(组图))
最近准备入手一个PHP爬虫,发现PHP的cURL的知识绕不过去。本文讨论的是基础实战,需要提前了解命令行的使用,搭建PHP环境。
卷曲的概念
cURL,即客户端 URL 库函数,是一个开源文件传输工具,它使用 URL 语法在命令行模式下工作。它广泛用于 Unix 和 Linux 发行版,并且在 Win32、Win64 下有一个移植版本。常用的 cURL 库 libcurl 支持 http、https、ftp、gopher、telnet、dict、file 和 ldap 协议。libcurl 还支持 HTTPS 身份验证、HTTP POST、HTTP PUT、FTP 上传(这也可以通过 PHP 的 FTP 扩展完成)、基于 HTTP 表单的上传、代理、cookie 和用户名+密码身份验证。
[图片上传失败...(image-cc9fed-83)]](%7CimageView2/2/w/1240)
简而言之,cURL 是一个客户端启动的管理程序,它支持大多数 Internet 协议套件,并且可以下载或上传网络文件。
命令行下cURL可以做什么爬取网页源码
打开命令行,输入以下命令,向百度服务器发送请求,获取首页源代码。>命令将源代码输出保存到当前目录下的baidu.html。
curl https://www.baidu.com > baidu.html
获取表单 GET 或 POST 方法
网页中的标签通常用于生成表单。当我们点击表单中的提交按钮时,浏览器会对表单中填写的所有参数进行分析打包,最后通过指定的HTTP方式发送到目标网络地址。
如下代码所示,将用户在输入框中填写的参数信息添加到URL地址中,并发送GET方法到目标服务器下的judge.php。在 GET 方法中,值与表单中的每个字段一一对应。
GET方法中的参数会出现在URL地址中,所以我们也在基于命令行的cURL下进行模拟。
curl www.example.com/judge.php?year=1997&press=ok
URL 语法表示一般的 URL 地址格式如下。不难看出,上面示例代码中的year字段及其值是
实例。
://:@:/:?#
与 GET 方法不同,HTTP 中的 POST 请求将数据传输到服务器。由于经常会有账号、密码等隐私信息,所以这些数据通常会添加到 HTML Header 中,在 URL 地址中是不可见的,然后将数据传输到目标服务器。
在命令行上,cURL 将 POST 方法作为 -d 参数处理。
curl -d "year=1997&press=OK" www.example.com/judge.php
上传文件 POST 或 PUT 方法
1995 年末,RFC 1867 定义了一种用于上传文件的新 POST 方法。主要用于上传本地文件到服务器。此时页面内容如下:
对应的 cURL 命令使用 -F 作为命令参数,如下所示。
curl -F upload=@localfilename -F press=OK URL
HTTP 协议文件上传的标准方法是使用 PUT,在这种情况下 cURL 命令使用 -T 参数:
curl -T uploadfile www.uploadhttp. com/receive.php
假装是指定的客户
有些网络资源首先需要判断用户使用的是什么浏览器,符合标准才能下载或浏览。此时 curl 可以像任何其他浏览器一样“伪装”自己:
curl -A "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" URL
该指令表示cURL伪装成IE5.0,用户平台为Windows 2000。
curl -A "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" URL
此时 cURL 变成了 Netscape,运行在 PIII 平台上的 Linux 上。
和更多
在cURL的概念中提到,除了请求网页、上传文件和伪装外,cURL的功能还包括使用cookies访问目标服务器(参数-b)、访问加密的HTTP页面(HTTPS)、使用本地证书访问需要证书认证。网络上的所有资源都可以通过 cURL 访问和下载。
在 PHP 中使用 cURL
Daniel Stenberg 创建的 PHP 支持的 libcurl 库允许我们使用各种类型的协议与各种服务器进行连接和通信。
为了使用 cURL 功能,您需要安装 cURL 包。PHP 要求我们使用 cURL 7.0.2-beta 或更高版本。如果 cURL 的版本低于 7.0.2-beta,PHP 将无法工作。
要使用 PHP 的 CURL 支持,我们必须使用 --with-curl[=DIR] 参数重新编译 PHP(DIR 是收录库和头文件的目录)。
在前面提到的命令行下cURL的实现中,不难理解PHP中的cURL函数:首先使用curl_init()函数初始化cURL会话,然后就可以设置与这个cURL过程相关的所有选项,并通过 curl_exec() 函数执行它。最后,我们可以使用 curl_close() 函数来结束当前会话并节省资源。下面是 MOOC 上 PHP 中 cURL 过程的图示。
[图片上传失败...(image-1c28eb-84)]](%7CimageView2/2/w/1240)
安装卷曲
Mac 自带的 PHP 环境对 cURL 提供了很好的支持。如果它不是 Macintosh,也许这些可以提供帮助:
Generic Linux 下的 cURL 安装
获取安装包,直接从网上或者其他方式下载,这里直接wget
# wget http://curl.haxx.se/download/curl-7.17.1.tar.gz
解压到当前目录,输入
# tar -zxf curl-7.17.1.tar.gz & cd curl-7.17.1
配置,指定安装目录,这里是“/usr/local/curl”
# ./configure –prefix=/usr/local/curl
编译安装
安装完成后,将 curl 命令添加到环境变量中。
# export PATH=$PATH:/usr/local/curl/bin
Ubuntu小卷曲安装
Ubuntu 自带的 apt-get 包管理器可以帮助我们解决所有的依赖。
sudo apt-get install curl libcurl3 libcurl3-dev php5-curl
然后重启服务器,这里是apache服务器。
sudo /etc/init.d/apache2 restart
Windows下的扩展
Windows下安装PHP后,将PHP文件夹下的三个文件 php_curl.dll , libeay32.dll , ssleay32.dll 复制到system32中,然后将php.ini (c:WINDOWS 去掉分号后在 ;extension=php_curl.dll 中,在 ;extension=php_curl.dll 中,重启服务器。
开始实战
这里从简单到复杂的小Demo,一步一步来。
一个简单的带有 cURL 的网络爬虫
将以下 PHP 代码保存为 example1.php 并在命令行中执行。
php -f example1.php > baidu1.html
open baidu1.html
使用 cURL 抓取网页信息并替换部分内容
将以下 PHP 代码另存为 example2.php 并在命令行中执行。
php -f example2.php > baidu2.html
open baidu2.html
使用 cURL 获取天气信息
将以下 PHP 代码另存为 example2.php 并在命令行中执行。
php -f example2.php > weather.html
open weather.html
本文介绍cURL的基础知识和cURL在PHP中的基本实战。请期待更高级的用法。