php中CURL技术模拟登陆抓取数据实战,抓取某校教务处学生成绩。
这两天有基友要php中curl抓取教务处成绩的源码,用于微信公众平台的开发。下面笔者只好忍痛割爱了。php中CURL技术模拟登陆抓取数据实战,抓取沈阳工学院教务处学生成绩。
首先,教务处登录需要验证码。我们寻找验证码的链接地址http://218.61.108.163/ACTIONVALIDATERANDOMPICTURE.APPPROCESS,来进行数据的抓取。下面看下主要代码-index.php
<?php
$ch=curl_init("http://218.61.108.163/ACTIONVALIDATERANDOMPICTURE.APPPROCESS");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_HEADER,1);
$str=curl_exec($ch);
curl_close($ch);
list($header, $body) = explode("\r\n\r\n", $str);
preg_match("/JSESSIONID=(.*); path=/i", $header, $matches);
$cookie = $matches[1]; ?>
需要模拟cookie进行登录,所以我们建立一个api.php的页面进行cookie的模拟,以及需要抓取成绩的链接地址http://218.61.108.163/ACTIONLOGON.APPPROCESS,对首页index.php表单中值进行获取
<?php
if(isset($_POST['code'])){
$jwid=$_POST['xuehao'];
$jwpwd=$_POST['mima'];
$code=$_POST['code'];
$ck=$_POST['ck'];
$data="WebUserNO={$jwid}&Password={$jwpwd}&Agnomen={$code}&submit.x=23&submit.y=9&applicant=ACTIONQUERYSTUDENTSCORE";
$ch=curl_init("http://218.61.108.163/ACTIONLOGON.APPPROCESS");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_COOKIE, "JSESSIONID={$ck}");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$str=curl_exec($ch);
curl_close($ch);
}
}
在登录页中,我们可以看到登录需要验证码。所以,我们建议一个code.php页面用于验证码的获取、
<?php
$ch=curl_init("http://218.61.108.163/ACTIONVALIDATERANDOMPICTURE.APPPROCESS");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_COOKIE, "JSESSIONID={$_GET['ck']}");
$str=curl_exec($ch);
curl_close($ch);
echo $str;
?>
最后一步。把所要获取的数据接收,使用正则表达式进行数据的抓取以及排版。
<?php
function get_td_array($table) {
$table = preg_replace("/<table[^>]*?>/is","",$table);
$table = preg_replace("/<tr[^>]*?>/si","",$table);
$table = preg_replace("/<td[^>]*?>/si","",$table);
$table = str_replace("</tr>","{tr}",$table);
$table = str_replace("</td>","{td}",$table);
$table = str_replace(" ","",$table);
$table = preg_replace("'<[/!]*?[^<>]*?>'si","",$table);
$table = preg_replace("'([rn])[s]+'","",$table);
$table = str_replace(" ","",$table);
$table = str_replace(" ","",$table); $table = explode('{tr}', $table);
array_pop($table);
foreach ($table as $key=>$tr) {
$td = explode('{td}', $tr);
$td = explode('{td}', $tr);
array_pop($td);
$td_array[] = $td;
}
return $td_array;
}
?>
完整的代码大家可以去http://pan.baidu.com/share/link?shareid=3722188112&uk=1496266064进行下载。密码:a3eh
php中CURL技术模拟登陆抓取数据实战,抓取某校教务处学生成绩。的更多相关文章
- PHP中CURL技术模拟登陆抓取网站信息,用与微信公众平台成绩查询
伴随微信的红火,微信公众平台成为许多开发者的下一个目标.笔者本身对于这种新鲜事物没有如此多的吸引力.但是最近有朋友帮忙开发微信公众平台中一个成绩查询的功能.于是便在空余时间研究了一番. 主要的实现步骤 ...
- php中CURL实现模拟登录并采集数据
在php中采集我们用的是简单的采集方式(例如file_get_contents)就无法做到了,但是如果想模拟登录用户并采集利用它就没办法了,我们可利用CURL函数来实现模拟登录并采集数据 这里要说一些 ...
- 跟着百度学PHP[17]-PHP扩展CURL的模拟登陆并获取数据
这两天也不知道怎么,学习效率低.很无奈. 如何知道要去URL该怎么填写呢?就是填写表单中的Action内容: tempnam() 函数创建一个具有唯一文件名的临时文件. <?php header ...
- PHP 之 CURL 模拟登陆并获取数据
1.CURL模拟登陆的流程和步骤 2.tempnam 创建一个临时文件 3.使用CURL模拟登陆到PHP100论坛 <?php $cookie_file = tempnam('./temp',' ...
- 【转】PHP 之 CURL 模拟登陆并获取数据
1.CURL模拟登陆的流程和步骤2.tempnam 创建一个临时文件3.使用CURL模拟登陆到PHP100论坛 <?php$cookie_file = tempnam('./temp','coo ...
- 【个人】爬虫实践,利用xpath方式爬取数据之爬取虾米音乐排行榜
实验网站:虾米音乐排行榜 网站地址:http://www.xiami.com/chart 难度系数:★☆☆☆☆ 依赖库:request.lxml的etree (安装lxml:pip install ...
- 直接通过curl方式取得数据、模拟登陆、POST数据
博客园的Markdown编辑器太坑爹了@!!! 算了.不用格式了!!! /********************** curl 系列 ***********************/ //直接通过c ...
- python3 selenium模拟登陆斗鱼提取数据保存数据库
# coding=utf-8from selenium import webdriverimport jsonimport timeimport pymongo class Douyu: def __ ...
- 使用google chrome抓取数据:抓取全国的高中的数据
http://tomycat.github.io/blog/other/2014/05/28/use-google-chrome-capture-data.html
随机推荐
- 记RedisDesktopManager的一次崩溃
redis3.2的配置文件中有bind监听地址 bind 192.168.42.131默认bind的填写的127.0.0.1这样配置是只允许本地访问,如果想远程访问就改为本机网卡绑定的ip地址.我这边 ...
- NSAutoreleasePool' is unavailable: not avail
NSAutoreleasePool' is unavailable: not available in automatic reference counting mode 这我就纠结了,对着书敲都出问 ...
- C++编译器函数模版机制剖析 - 函数模版的本质
思考:为什么函数模板能够和函数重载放在一块.C++编译器是怎样提供函数模板机制的? demo 1 #include <cstdio> #include <iostream> u ...
- uva340 数字匹配检索问题
这道题目大意是:给定一个secret code,然后输入guess code,让你编程给出提示,提示的格式是(i,j),其中i表示strong match的个数,j表示weak match的个数.所谓 ...
- Android中滑屏实现----手把手教你如何实现触摸滑屏以及Scroller类详解
前言: 虽然本文标题的有点标题党的感觉,但无论如何,通过这篇文章的学习以及你自己的实践认知,写个简单的滑屏小 Demo还是just so so的. 友情提示: 在继续往下面读之前,希望您对以下知识点 ...
- asp遇到的一些问题
1.伪静态问题...后台设置支持, 2.数据库链接错误,也就是说 .net 功能冲突,要后台关闭 3.本机也可以设置 iis服务器 win7配置自己的IIS服务器亲自做的图文很详细 http://j ...
- How To Install Kernel 3.10 On Ubuntu, Linux Mint, Debian and Derivates
n this article I will show you how to install Linux Kernel 3.10 on Ubuntu 13.10 Saucy Salamander, Ub ...
- Android开发之Bitmap二次采样
Bitmap二次采样,听着好像是一个高大上的事,其实也就那么回事,今天我们就来看看Bitmap的二次采样问题. 1.为什么要二次采样 OK,那么首先我要 解决的一个问题就是为什么我们要二次采样? 不知 ...
- Android(java)学习笔记211:采用httpclient提交数据(qq登录案例)
1.Apache -Httpclient HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包 ...
- HINSTANCE数据类型
作者:马 岩(Furzoom) (http://www.cnblogs.com/furzoom/)版权声明:本文的版权归作者与博客园共同所有.转载时请在明显地方注明本文的详细链接,未经作者同意请不要删 ...