吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3053|回复: 2
收起左侧

[会员申请] 申请会员ID:jason19659

[复制链接]
吾爱游客  发表于 2015-3-29 20:44
1、申 请 I D : jason19659           
2、个人邮箱:jason19659@163.com
3、原创技术文章:httpclient以及jsoup的初级应用,抓课表
前一阵要做微信平台,要回复课表并绑定帐号之后就可以回复今天的课表.也就是查课表功能.由于我们学校用的是青果教务系统(大部分学校都是这个)最后的过程如下,写的不好请见谅.
首先,登录教务系统并抓取数据

我的学校的教务系统是这样的.用chrome F12的network抓数据
之后使用httpclient发送请求模拟登录

Java代码

  • String result = ""; //结果页面
  • System.out.println("========================");
  • List<Cookie> cookies = null; // 保存获取的cookie
  • HttpClient client = new DefaultHttpClient();
  • HttpClient clientGet = new DefaultHttpClient();
  • HttpResponse httpResponse = null;
  • String uriAPI = "教务系统登录请求发送的网址";
  • HttpPost httpRequest = new HttpPost(uriAPI);
  • HttpGet httpRequestGet = new HttpGet("教务系统网址");
  • HttpResponse httpResponseGet = clientGet.execute(httpRequestGet);
  • httpResponseGet.getAllHeaders();
  • CookieStore cookieStore = ((AbstractHttpClient) clientGet).getCookieStore();
  • cookies = cookieStore.getCookies();


我的代码可能有点臃肿,我是这样拿到了cookie.
之后把header和请求头信息\原封不动的写下来

然后
httpResponse = client.execute(httpRequest); 执行请求
用了一段别人封装好的代码 抓去源码

Java代码

  • private static String showResult(HttpResponse h) throws IllegalStateException, IOException {
  • StringBuffer sb = new StringBuffer();
  • HttpEntity entity = h.getEntity();
  • InputStream is = entity.getContent();
  • BufferedReader br = new BufferedReader(new InputStreamReader(
  • is, "GB2312"));
  • String data = "";
  • while ((data = br.readLine()) != null) {
  • sb.append(data);
  • }
  • return sb.toString();
  • }


并且用同样的方法抓取查课表发送的数据
发现请求地址如下../jwweb/znpk/Pri_StuSel_rpt.aspx
IDA Console, monospace">发送的数据如下
  • Sel_XNXQ:
    20130
  • rad:
    1
  • px:
    0
  • 这个数据Sel_XNXQ: 学年+学期(0,1,2)
  • rad是课表的格式
  • 因为我们学校是3个学期

然后按照上面的方法发送请求

Java代码

  • params2.add(new BasicNameValuePair("rad", "0"));
  • params2.add(new BasicNameValuePair("px", "0"));
  • params2.add(new BasicNameValuePair("Sel_XNXQ", "20130"));


这里只写了数据

抓到后的源代码是这样的

整理之后 发现我们需要的是第4个table里面的tr标签然后提取出需要里面的td里有valign=top的就可以了
所以我写了一个处理的方法

Java代码

  • private static Elements dealCurriculumHTMLPrivate(String html) {
  • html = html.replace("<br>", "");
  • Document doc = Jsoup.parse(html);
  • Element link = doc.select("table").get(3);
  • Elements linksTRs = link.getElementsByTag("tr");
  • return linksTRs;
  • }
  • /**
  • * 批量处理课表页面到友好格式
  • *
  • * @param html
  • *    html源码
  • * @return 处理好的文本
  • */
  • public static String dealCurriculumHTML(String html) {
  • Elements linksTRs = dealCurriculumHTMLPrivate(html);
  • return linksTRs.select("td[valign=top]").html().trim();
  • }


这样处理之后就拿到了 文本的课表
封装之后..最后抓到的数据就是这样的了
[52001CC166]软件测试技术康玲[1-2,4-16周]二[3-4节]教学楼A7-217[74005CC165]实用英语口语(一)Nady[1-2,4-16周]二[5-6节]教学楼A6-427[74005CC163]实用英语(三)张春艳[1-2,4-7,9-16周]二[7-8节]教学楼A7-202-----------------------------------------------------------------------------
总结一下,新手写的大家见谅


学会最基本的抓数据 之后模拟发送数据再提取数据就可以了 总之还是非常简单的我之后把它做成了一个web项目,封装了接口,做了数据库缓存(因为我的学校的教务系统奇慢).每次先从数据库读内容,然后数据库再更新.供微信平台调用.这样实现了5秒内返回结果.--------------------------------------------有什么问题可以联系我..


QQ截图20140218150435.png (0 Bytes, 下载次数: 0)


另外还有一个抓视频的教程
http://www.acfun.tv/v/ac1550432


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2015-3-30 16:20
ID:jason19659
邮箱:jason19659@163.com

申请通过,欢迎光临吾爱破解论坛,期待吾爱破解有你更加精彩,ID和密码自己通过邮件密码找回功能修改,请即时登陆并修改密码!
登陆后请在一周内在此帖报道,否则将删除ID信息。
jason19659 发表于 2015-4-5 12:01
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 18:19

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表