php网页抓取工具( php抓取四川大学综合教务网站成绩信息、课程信息以及解析)
优采云 发布时间: 2021-10-04 15:22php网页抓取工具(
php抓取四川大学综合教务网站成绩信息、课程信息以及解析)
[Php] Curl 模拟登录抓取页面信息
本项目中,使用php抓取四川大学综合教务网站登录用户的成绩信息、课程信息和基本信息,分析数据并存入数据库,实现进一步分析获取的信息,并呈现给用户。
本文主要记录使用curl模拟登录、获取cookie和进行数据抓取的过程。
curl 的基本特性:使用 curlInitialize 一个 curl 句柄完成请求的简单步骤
资源 curl_init ([ string $url = NULL]) 设置 curl 选项
bool curl_setopt (resource $ch, int $option, mixed $value) 执行 curl 请求
混合 curl_exec (resource $ch) 释放 curl 资源
void curl_close(resource $ch) 详细实现步骤
1. 初始化卷曲句柄
初始化一个新会话并返回接下来三个步骤的 curl 句柄:curl_setopt、curl_exec 和 curl_close。
代码:
//设置请求所需信息
$userzjh = "XXXXXX";
$usermm = "XXXXXX";
$request = "mm=$usermm&zjh=$userzjh";
$cookie_jar = tempnam('./tmp','cookie'); //设置cookie文件的保存位置
$curl = curl_init(); //初始化,获得curl句柄
2.设置卷曲选项
使用 curl_setopt 函数设置 curl 对应的传输选项。
该函数收录三个参数:resource $ch、int $option、mixed $value
第一个参数是第一步初始化的curl句柄,第二个参数是要设置的选项,第三个参数是选项的值。
一些curl选项和可选值的对应表如下:
选项选项描述值值
CURLOPT_URL
设置你想用PHP检索的URL地址,即你想从中获取信息的页面地址。(注:非登录地址)
网址
CURLOPT_POST
设置为使用POST发送数据
真假
CURLOPT_POSTFIELDS
发送后传所需的数据(内容格式可通过抓包工具或浏览器开发工具获取)
内容
CURLOPT_COOKIEJAR
将 cookie 信息保存到文件
保存文件地址
CURLOPT_RETURNTRANSFER
将 curl_exec() 获取的信息以文件流的形式返回,而不是直接输出
真假
CURLOPT_HEADER
启用后,头文件信息将作为数据流输出。头文件信息收录登录是否成功、重定向URL等信息。
真假
CURLOPT_COOKIEFILE
传递一个收录 cookie 数据文件名的字符串
文档名称
代码:
curl_setopt($curl,CURLOPT_URL,'http://zhjw.scu.edu.cn/loginAction.do'); //要抓取的页面url
curl_setopt($curl, CURLOPT_POST, 1); //使用post传输数据
curl_setopt($curl, CURLOPT_POSTFIELDS, $request); //传递数据
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_jar); //把返回来的cookie信息保存在$cookie_jar文件中
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //设定返回的数据是否自动显示
curl_setopt($curl, CURLOPT_HEADER, false); //设定是否显示头信息
3.执行 curl 请求
设置所需选项的值后,执行请求并获取返回结果。
$result = curl_exec($curl);
//若设置CURLOPT_HEADER为true,此处$result中保存头信息
if (curl_errno($curl)) //判断是否执行成功
{
echo 'Errno'.curl_error($curl);
}
4.发布curl资源
curl_close($curl); //关闭会话
完整代码
//设置请求所需信息
$userzjh = "XXXXXX";
$usermm = "XXXXXX";
$request = "mm=$usermm&zjh=$userzjh";
$cookie_jar = tempnam('./tmp','cookie'); //设置cookie文件的保存位置
$curl = curl_init(); //初始化,获得curl句柄
curl_setopt($curl,CURLOPT_URL,'http://zhjw.scu.edu.cn/loginAction.do'); //要抓取的页面url
curl_setopt($curl, CURLOPT_POST, 1); //使用post传输数据
curl_setopt($curl, CURLOPT_POSTFIELDS, $request); //传递数据
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_jar); //把返回来的cookie信息保存在$cookie_jar文件中
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //设定返回的数据是否自动显示
curl_setopt($curl, CURLOPT_HEADER, false); //设定是否显示头信息
$result = curl_exec($curl);
//若设置CURLOPT_HEADER为true,此处$result中保存头信息
if (curl_errno($curl)) //判断是否执行成功
{
echo 'Errno'.curl_error($curl);
}
curl_close($curl); //关闭会话
//获取学籍信息
$curl4 = curl_init(); //重新建立一个会话
$url = 'http://zhjw.scu.edu.cn/xjInfoAction.do?oper=xjxx';
curl_setopt($curl4,CURLOPT_URL,$url);
curl_setopt($curl4,CURLOPT_COOKIEFILE,$cookie_jar);
curl_setopt($curl4,CURLOPT_RETURNTRANSFER,1);
$content = curl_exec($curl4);
curl_close($curl4);
file_put_contents("./xueji.txt",$content); //将html页面内容保存在文件中,用于后续分析
登录后,您可以获取服务器发送的会话 ID。此会话 ID 收录在每个后续请求的 cookie(客户端)中。用于读取服务器端对应的会话,识别用户身份。
--------------------- 本文来自cocole2的CSDN博客,全文地址请点击: