【php】curl模拟登录抓取页面信息

在本项目中,使用php抓取四川大学综合教务网站的成绩信息、课程信息以及登录用户的基本资料,解析数据并存入数据库,以实现对所得信息的进一步分析,并呈现给用户。
本文主要记录了使用curl模拟登录,获取cookie1并进行数据抓取的过程。

curl基本特性

  • 模拟浏览器传输数据
  • 实现post/get方式传输
  • 支持多种协议:HTTP、HTTPS、FTP上传
  • 支持cookie,用户名/密码的认证

使用curl完成请求的简单步骤

  1. 初始化一个curl句柄
    resource curl_init ([ string $url = NULL ] )
  2. 设置curl选项
    bool curl_setopt ( resource $ch , int $option , mixed $value )
  3. 执行curl请求
    mixed curl_exec ( resource $ch )
  4. 释放curl资源
    void curl_close ( resource $ch )

实现步骤详解

1. 初始化curl句柄
初始化新的会话,返回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选项
使用curl_setopt函数设置curl的相应传输选项。
此函数中包含三个参数:resource $ch , int $option , mixed $value
第一个参数为步骤一中初始化所得的curl句柄,第二个参数所要设置的选项,第三个参数为选项的值。
curl部分选项与可选值对应表如下:

option选项 说明 value值
CURLOPT_URL 设置想用PHP取回的URL地址,即想要获取信息的页面地址。(注意:非登录地址) URL地址
CURLOPT_POST 设置使用POST方式发送数据 true/false
CURLOPT_POSTFIELDS 发送post传输所需数据(内容格式可通过抓包工具或浏览器开发者工具获得) 内容
CURLOPT_COOKIEJAR 将cookie信息保存到文件中 保存文件地址
CURLOPT_RETURNTRANSFER 将curl_exec()获取的信息以文件流的形式返回,而不是直接输出 true/false
CURLOPT_HEADER 启用时会将头文件的信息作为数据流输出,头文件信息中包含是否登录成功、重定向网址等信息 true/false
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); //关闭会话
  • 1

完整代码

//设置请求所需信息
$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页面内容保存在文件中,用于后续分析

  1. 登录后,可获得从服务器发送来的session ID,这个session ID 包含在之后每次请求的cookie(客户端)中,用于读取服务器端的对应session,辨别用户身份。 ↩

--------------------- 本文来自 cocole2 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/cocole2/article/details/72581110?utm_source=copy

【php】curl模拟登录抓取页面信息相关推荐

  1. php登录页面后抓取页面内容,PHP模拟登陆抓取页面内容

    平时开发中经常会遇到抓取某个页面内容, 但是有时候某些页面需要登陆才能访问, 最常见的就是论坛, 这时候我们需要来使用curl模拟登陆. 大致思路:需要先请求提取 cookies 并保存,然后利用保存 ...

  2. 关于php抓取页面信息的简单代码

    2019独角兽企业重金招聘Python工程师标准>>> 利用php DOM函数实现简单的单页信息抓取   (在这里尽抓取a标签,功能实现了,但是扩展页链接抓取没有实现,欢迎大家批评 ...

  3. curl模拟多线程抓取网页(优化)

    通过上篇文章清楚了通过curl_multi_*函数可以一次请求多个url,但是也留下了问题,就是结果要等所有数据请求结束一起返回,才能逐个处理数据.优化代码,使先成功请求的url先返回处理结果,而不是 ...

  4. shell 抓取页面信息 ip168查询 IP归属地

    通过ip168批量查询ip归属地#!/bin/bash while read line do echo $line ip=$(echo -en $line | awk '{print $3}' | a ...

  5. PHP使用CURL抓取页面

    cURL的基本原理 curl是利用URL语法在命令行方式下工作的开源文件传输工具,他能够从互联网上获得各种各样的网络资源.简单来说,curl就是抓取页面的升级版. <?php//1.初始化,创建 ...

  6. python刷新页面_Python模拟浏览器爬取天猫信息

    由于工作需要,需要提取到天猫400个指定商品页面中指定的信息,于是有了这个爬虫.这是一个使用 selenium 爬取天猫商品信息的爬虫,虽然功能单一,但是也算是 selenium 爬虫的基本用法了. ...

  7. curl抓取页面时遇到重定向的解决方法(转)

    用php的curl抓取网页遇到了问题,为阐述方便,将代码简化如下: [php] view plaincopy <?php function curlGet($url) { $ch = curl_ ...

  8. python 模拟浏览器selenium_Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例...

    本文实例讲述了Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息.分享给大家供大家参考,具体如下: import time from multiprocessing import Poo ...

  9. python采集直播间数据_Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例...

    本文实例讲述了Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息.分享给大家供大家参考,具体如下: import time from multiprocessing import Poo ...

最新文章

  1. platform_driver_register适配的两种方式及probe是否启动与硬件关系
  2. 【Netty】ByteBuf--Netty的数据容器
  3. JQuery的筛选方法
  4. 计算机视觉导论试题,计算机视觉基础复习.docx
  5. go语言 panic
  6. python求高阶导数_Pythorch中的高阶梯度
  7. 使用wwise音效引擎的好处
  8. XTU 2016上学期《程序设计实践》练习-1 题解
  9. 第四次作业——04树
  10. hdoj2044:一只小蜜蜂(递推)
  11. 模式识别属于计算机科学吗,模式识别与智能系统这个学科属于什么类?
  12. matlab设计计算器,MATLAB-计算器的设计.doc
  13. 使用 C# 实现 CJ-T188 水表协议和 DL-T645 电表协议的解析与编码
  14. Abp vnext Web应用程序开发教程 2 —— 图书列表页面
  15. 路由算法(Dijkstra, Bellman-Ford算法)
  16. R 计算时间序列的交叉相关性教程
  17. 3 移动机器人路径规划(1- 栅格地图绘制)
  18. 电大计算机毕业论文任务书范文,广播电视大学毕业设计任务书表格.doc
  19. 【每日早报】2019/10/10
  20. 英文连写字体怎么练_一篇文章教孩子学会衡水英文字体,建议收藏!

热门文章

  1. 运行tomcat7w.exe tomcat7.exe ,提示 指定的服务未安装 unable to open the service 'tomcat7'
  2. 快速安装Jupyter Notebook主题皮肤并设置教程
  3. AI图像识别遇上对抗性图像竟变“瞎子”
  4. 企业财务报表查询方式
  5. 淘宝框架atlas基本使用说明
  6. bzoj 3521: [Poi2014]Salad Bar
  7. ajax换头像,ajax切换明星头像!
  8. iptv是什么意思?什么是iptv?
  9. 太极计算机 杨振,杨振基传太极拳内功心法
  10. 改编的一个滑动门代码