php网页抓取工具( php抓取四川大学综合教务网站成绩信息、课程信息以及解析)

优采云 发布时间: 2021-10-04 15:22

  php网页抓取工具(

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博客,全文地址请点击:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线