php抓取网页数据实例( GET方法中的值和表单和值越过(组图))
优采云 发布时间: 2021-10-11 14:20php抓取网页数据实例(
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中的基础实战。更多高级用法,敬请期待。