【php】curl模拟登录抓取页面信息
【php】curl模拟登录抓取页面信息
在本项目中,使用php抓取四川大学综合教务网站的成绩信息、课程信息以及登录用户的基本资料,解析数据并存入数据库,以实现对所得信息的进一步分析,并呈现给用户。
本文主要记录了使用curl模拟登录,获取cookie1并进行数据抓取的过程。
curl基本特性
- 模拟浏览器传输数据
- 实现post/get方式传输
- 支持多种协议:HTTP、HTTPS、FTP上传
- 支持cookie,用户名/密码的认证
使用curl完成请求的简单步骤
- 初始化一个curl句柄
resource curl_init ([ string $url = NULL ] )
- 设置curl选项
bool curl_setopt ( resource $ch , int $option , mixed $value )
- 执行curl请求
mixed curl_exec ( resource $ch )
- 释放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页面内容保存在文件中,用于后续分析
- 登录后,可获得从服务器发送来的session ID,这个session ID 包含在之后每次请求的cookie(客户端)中,用于读取服务器端的对应session,辨别用户身份。 ↩
--------------------- 本文来自 cocole2 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/cocole2/article/details/72581110?utm_source=copy
【php】curl模拟登录抓取页面信息相关推荐
- php登录页面后抓取页面内容,PHP模拟登陆抓取页面内容
平时开发中经常会遇到抓取某个页面内容, 但是有时候某些页面需要登陆才能访问, 最常见的就是论坛, 这时候我们需要来使用curl模拟登陆. 大致思路:需要先请求提取 cookies 并保存,然后利用保存 ...
- 关于php抓取页面信息的简单代码
2019独角兽企业重金招聘Python工程师标准>>> 利用php DOM函数实现简单的单页信息抓取 (在这里尽抓取a标签,功能实现了,但是扩展页链接抓取没有实现,欢迎大家批评 ...
- curl模拟多线程抓取网页(优化)
通过上篇文章清楚了通过curl_multi_*函数可以一次请求多个url,但是也留下了问题,就是结果要等所有数据请求结束一起返回,才能逐个处理数据.优化代码,使先成功请求的url先返回处理结果,而不是 ...
- shell 抓取页面信息 ip168查询 IP归属地
通过ip168批量查询ip归属地#!/bin/bash while read line do echo $line ip=$(echo -en $line | awk '{print $3}' | a ...
- PHP使用CURL抓取页面
cURL的基本原理 curl是利用URL语法在命令行方式下工作的开源文件传输工具,他能够从互联网上获得各种各样的网络资源.简单来说,curl就是抓取页面的升级版. <?php//1.初始化,创建 ...
- python刷新页面_Python模拟浏览器爬取天猫信息
由于工作需要,需要提取到天猫400个指定商品页面中指定的信息,于是有了这个爬虫.这是一个使用 selenium 爬取天猫商品信息的爬虫,虽然功能单一,但是也算是 selenium 爬虫的基本用法了. ...
- curl抓取页面时遇到重定向的解决方法(转)
用php的curl抓取网页遇到了问题,为阐述方便,将代码简化如下: [php] view plaincopy <?php function curlGet($url) { $ch = curl_ ...
- python 模拟浏览器selenium_Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例...
本文实例讲述了Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息.分享给大家供大家参考,具体如下: import time from multiprocessing import Poo ...
- python采集直播间数据_Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例...
本文实例讲述了Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息.分享给大家供大家参考,具体如下: import time from multiprocessing import Poo ...
最新文章
- platform_driver_register适配的两种方式及probe是否启动与硬件关系
- 【Netty】ByteBuf--Netty的数据容器
- JQuery的筛选方法
- 计算机视觉导论试题,计算机视觉基础复习.docx
- go语言 panic
- python求高阶导数_Pythorch中的高阶梯度
- 使用wwise音效引擎的好处
- XTU 2016上学期《程序设计实践》练习-1 题解
- 第四次作业——04树
- hdoj2044:一只小蜜蜂(递推)
- 模式识别属于计算机科学吗,模式识别与智能系统这个学科属于什么类?
- matlab设计计算器,MATLAB-计算器的设计.doc
- 使用 C# 实现 CJ-T188 水表协议和 DL-T645 电表协议的解析与编码
- Abp vnext Web应用程序开发教程 2 —— 图书列表页面
- 路由算法(Dijkstra, Bellman-Ford算法)
- R 计算时间序列的交叉相关性教程
- 3 移动机器人路径规划(1- 栅格地图绘制)
- 电大计算机毕业论文任务书范文,广播电视大学毕业设计任务书表格.doc
- 【每日早报】2019/10/10
- 英文连写字体怎么练_一篇文章教孩子学会衡水英文字体,建议收藏!
热门文章
- 运行tomcat7w.exe tomcat7.exe ,提示 指定的服务未安装 unable to open the service 'tomcat7'
- 快速安装Jupyter Notebook主题皮肤并设置教程
- AI图像识别遇上对抗性图像竟变“瞎子”
- 企业财务报表查询方式
- 淘宝框架atlas基本使用说明
- bzoj 3521: [Poi2014]Salad Bar
- ajax换头像,ajax切换明星头像!
- iptv是什么意思?什么是iptv?
- 太极计算机 杨振,杨振基传太极拳内功心法
- 改编的一个滑动门代码