php curl抓取网页指定内容( 命令行下的cURL能做什么(本文)(组图))

优采云 发布时间: 2022-01-13 00:21

  php 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中的基本实战。请期待更高级的用法。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线