php抓取网页数据实例( GET方法中的值和表单和值越过(组图))

优采云 发布时间: 2021-10-11 14:20

  php抓取网页数据实例(

GET方法中的值和表单和值越过(组图))

  

  最近准备入手一个PHP爬虫,发现PHP的cURL是一个无法超越的知识点。本文讨论的是基础实战,需要提前了解命令行的使用,才能搭建PHP环境。

  卷曲的概念

  CURL,Client URL Library Functions,是一个开源文件传输工具,它使用 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)]](//upload-images.jianshu.io/upload_images/2558748-f4dcbe5d6e4e7097.png?imageMogr2/auto-orient/strip %7CimageView2/2/w/1240)

  简而言之,cURL 是一个客户端启动的管理程序,支持大多数 Internet 协议族,可以下载或上传网络文件。

  命令行上的cURL可以爬取什么网页源码?

  打开命令行,输入以下命令,向百度服务器发送获取首页源码的请求。>命令将源代码输出保存到当前目录下的baidu.html。

  

curl https://www.baidu.com > baidu.html

  

  获取表单 · GET 或 POST 方法

  网页中的标签通常用于生成表单。当我们点击表单中的提交按钮时,浏览器会对表单中填写的所有参数进行分析和打包,最后使用指定的HTTP方式发送到目标网络地址。

  下图代码将用户在输入框中填写的参数信息添加到URL地址中,并发送GET方法到目标服务器下的jugment.php。在 GET 方法中,该值对应于表单中的每个字段。

  GET方法中的参数会出现在URL地址中,所以我们也在命令行cURL下模拟这个。

  

curl www.example.com/judge.php?year=1997&press=ok

  URL 语法表示一般的 URL 地址格式如下。不难看出,上面示例代码中的year字段及其值是

  实例。

  

://:@:/:?#

  与 GET 方法不同,HTTP 中的 POST 请求向服务器发送数据。因为经常有账号、密码等隐私信息,这些数据通常会被添加到URL地址中不可见的HTML Header中,并将数据发送到目标服务器。

  在命令行中,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)、访问使用需要证书身份验证的本地证书。HTTP地址(参数-E)、授权、可续传、代理设置和网络限速等,网络上的所有资源都可以通过cURL访问和下载。

  

  在 PHP 中使用 cURL

  由 Daniel Stenberg 创建的 libcurl 库由 PHP 支持,允许我们使用各种类型的协议与各种服务器连接和通信。

  为了使用 cURL 功能,您需要安装 cURL 包。PHP 要求我们使用 cURL 7.0.2-beta 或更高版本。如果 curl 的版本低于 7.0.2-beta,PHP 将无法运行。

  要使用 PHP 的 CURL 支持,我们必须使用 --with-curl[=DIR] 参数(DIR 是收录库和头文件的目录)重新编译 PHP。

  在前面提到的命令行下curl的实现中,我们不难理解PHP中的curl函数:首先使用curl_init()函数来初始化curl会话,然后就可以设置所有与curl相关的选项curl 进程,并通过 curl_exec() 函数执行它。最后,我们可以使用 curl_close() 函数结束当前会话并节省资源。下面是MOOC上PHP中curl过程的说明。

  [图片上传失败...(image-1c28eb-84)]](//upload-images.jianshu.io/upload_images/2558748-d0b8cacdffe9766e.png?imageMogr2/auto-orient/strip%7CimageView2/2 /w/1240)

  安装卷曲

  Mac 自带的 PHP 环境对 cURL 提供了很好的支持。如果它不是 Macintosh,也许这些可以帮助:

  一般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

  编译安装

  

# make & make install

  安装完成后,在环境变量中添加 curl 命令。

  

# export PATH=$PATH:/usr/local/curl/bin

  Ubuntu小curl安装

  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 目录下),重启服务器。

  开始实战

  这里从简单到复杂的小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人工客服


线