php curl抓取网页(并教你如何更好的使用php_curl库的知识,并教)

优采云 发布时间: 2021-11-13 07:15

  php curl抓取网页(并教你如何更好的使用php_curl库的知识,并教)

  概括:

  在这个文章中,我们主要讲解php_curl库的知识,教大家更好的使用php_curl。

  介绍

  您在 PHP 脚本代码中可能会遇到这样一个问题:如何从其他站点获取内容?这里有几种解决方案;最简单的就是在php中使用fopen()函数,但是fopen函数没有足够的参数可以使用。例如,当你想构建一个“网络爬虫”时,你想定义爬虫的客户端描述(IE,firefox),通过不同的请求方式获取内容,如POST、GET;等。这些要求是不可能用 fopen() 函数实现的。

  为了解决我们上面提出的问题,我们可以使用PHP的扩展库-Curl。这个扩展库通常默认收录在安装包中。您可以使用它来获取其他网站的内容或做其他事情。

  注意:这两段代码需要php_curl扩展库的支持。检查 phpinfo()。如果启用了 curl 支持,则表示支持 curl 库。

  1、Windows下PHP开启curl库支持:

  打开 php.ini 并删除;在 extension=php_curl.dll 之前。

  2、Linux下PHP开启curl库支持:

  编译PHP时在./configure后面添加--with-curl

  在这个文章中,我们来看看curl库的使用方法,看看它的其他用途,但接下来,我们将从最基本的用法开始

  基本用法:

  第一步,我们通过函数curl_init()新建一个curl会话,代码如下:

  我们已经成功创建了一个 curl 会话。如果需要获取一个 URL 的内容,那么下一步就是将 URL 传递给 curl_setopt() 函数,代码:

  上一步完成后,curl的准备工作就完成了,curl会获取URL站点的内容并打印出来。代码:

  最后,关闭当前的 curl 会话

  我们来看一下完成的示例代码:

  (查看在线演示)

  我们刚刚获取了另一个站点的内容,并自动将其输出到浏览器。我们还有其他的方式来组织获取的信息,然后控制输出的内容吗?完全没有问题。在curl_setopt()函数的参数中,如果想获取内容但不输出,使用CURLOPT_RETURNTRANSFER参数并设置为非零值/true!,完整代码请看:

  (查看在线演示)

  在上面的两个例子中,你可能会注意到,通过设置函数 curl_setopt() 的不同参数可以得到不同的结果。这就是 curl 如此强大的原因。下面我们来看看这些参数的含义。

  CURL 的相关选项:

  如果你看过php手册中的curl_setopt()函数,你会注意到它下面有一长串参数,我们无法一一介绍。更多内容请查看PHP手册。这里我们只介绍常用的和一些参数。

  第一个有趣的参数是 CURLOPT_FOLLOWLOCATION。当您将此参数设置为 true 时,curl 将根据任何重定向命令获得更深的重定向路径。例如:当你尝试获取一个PHP页面时,那么这个PHP页面中有跳转代码,curl会获取内容而不是返回跳转代码。完整代码如下:

  (查看在线演示),

  如果 Google 发送重定向请求,上面的示例将继续根据重定向的 URL 获取内容。与此参数相关的两个选项是 CURLOPT_MAXREDIRS 和 CURLOPT_AUTOREFERER。

  参数 CURLOPT_MAXREDIRS 选项允许您定义跳转请求的最大数量,超过该数量将不再检索内容。如果 CURLOPT_AUTOREFERER 设置为 true,curl 将自动将 Referer 标头添加到每个重定向链接。它可能不是很重要,但在某些情况下非常有用。

  下一步引入的参数是 CURLOPT_POST,这是一个非常有用的特性,因为它允许你做 POST 请求而不是 GET 请求,这实际上意味着你可以提交

  对于其他形式的页面,无需实际填写表格。以下示例显示了我的意思:

  (查看现场演示)

  和 handle_form.php 文件:

  如您所见,这使得提交表单变得非常容易,这是一种无需一直填写即可测试所有表单的好方法。

  参数 CURLOPT_CONNECTTIMEOUT 通常用于设置 curl 尝试请求链接的时间。这是一个非常重要的选择。如果这个时间设置的太短,可能会导致 curl 请求失败。

  但是如果设置的时间太长,PHP 脚本可能会死掉。与此参数相关的一个选项是 CURLOPT_TIMEOUT,用于设置 curl 执行所需的时间。如果将此值设置为很小的值,可能会导致网页下载不完整,因为下载需要一段时间。

  最后一个选项是CURLOPT_USERAGENT,可以自定义请求的客户端名称,比如webspilder或者IE6.0.,示例代码如下:

  (查看现场演示)

  现在我们已经介绍了最有趣的参数之一,让我们介绍一个 curl_getinfo() 函数,看看它可以为我们做什么。

  获取页面信息:

  函数 curl_getinfo() 允许我们获取接收页面的各种信息。您可以通过设置选项的第二个参数来编辑此信息。也可以以数组的形式传递数组。就像下面的例子:

  (查看现场演示)

  返回的信息大部分是请求本身,比如:请求所用的时间,返回的头文件信息,当然还有一些页面信息,比如页面内容的大小,最后修改时间等。

  这些都是关于 curl_getinfo() 函数,现在让我们看看它的实际用途。

  真正的功能:

  curl 库的第一个用途是检查 URL 页面是否存在。我们可以通过查看URL请求返回的代码来判断。例如,404 表示该页面不存在。让我们看一些例子:

  (查看现场演示)

  其他用户可能会创建一个自动检查器来验证每个请求页面的存在。

  我们可以使用 curl 库来编写类似于 Google 的网络蜘蛛,或者其他网络蜘蛛。这篇文章文章不是关于如何写一个网络蜘蛛,所以我们没有谈论任何关于网络蜘蛛的细节,但是PHPit将来会介绍使用curl来构建一个网络蜘蛛。

  综上所述:

  在这个 文章 中,我展示了如何在 php 中使用 curl 库及其大部分选项。

  对于最基本的任务,只想获取一个网页,你可能不需要 CURL 库,但是一旦你想做一些稍微高级的事情,你可能想要使用 curl 库。

  在不久的将来,我会告诉你如何构建自己的网络蜘蛛,类似于谷歌的网络蜘蛛,敬请关注phpit。

  转载于:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线