爬取教务处网站

最近写了一个课程助手类Android App,写了一大半的时候发现这个课程助手适用于低频用户场景,如果做一个App反倒不如做成微信公众号。顿时丧失了一半写下去的毅力。那就停下来,把爬取教务处和一些类似网站的过程记录下来。

登录

成功登录教务处网站是拿到后续数据的关键。首先需要知道POST的数据格式。如果有验证码则要爬取验证码,识别之后,携带参数进行POST。在这之中一定要保持在同一会话中,也就是缓存cookie。登录成功后的cookie是获取之后数据的凭证。我常用的网络库为okhttp3,在okhttp3中cookie可以在okhttpclient创建的过程中配置。例如


okhttp3

在saveFromResponse和loadForRequest中分别缓存和提取cookie

在缓存cookie这一块是要根据不同网站来设置的,可能在同一个host不同的path下需要使用同一个cookie。如果使用Map来缓存cookie那就不能简单地用HttpUrl来作为key,否则就可能因为不在同一会话中导致验证码无法通过。

很多教务处的网站的登录并没有做的复杂,只需要简单的POST模拟,注意下缓存cookie就可以继续其他页面的获取。


解析

拿到数据之后,下一步就是从html页面中解析出想要的数据。我用过的页面解析包邮Jsoup和HtmlUnit。相比较Jsoup更加轻量化。Jsoup有很多很强大的API来帮助操作DOM,CSS,对于复杂的结构还可以使用选择器(selector)来提取,但一些网站会异步加载数据,这样会导致拿到的html页面并不是最终和在浏览器中看到一致,数据也不全。这时候就要用另一大利器HtmlUnit,它支持JS,CSS,所以操作HtmlUnit就像操作一个浏览器一样简单。htmlunit

有了利器,就要学着用了。提取复杂数据Jsoup可以使用选择器,HtmlUnit可以使用Xpath。selector和xpath的语法很简单,当然你也可以不学,为什么呢?

因为Chrome可以帮你!

例如

复杂的微博界面

对于如此复杂的界面,只需要:

移动鼠标到想要的数据上 -> 然后轻轻点击鼠标右键 -> 看到COPY复选框 -> 会出现copy as selector 和 copy as xpath。

对于教务处页面的提取,可以看做是爬虫的入门。如果要提取微博这样的复杂地页面,建议从移动端入口,移动端的页面更容易爬取和解析。附一个之前写的垃圾demo /捂脸 垃圾demo  


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,015评论 25 709
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,394评论 11 349
  • 昨天,快满50岁的朱丽倩被曝已有4个月身孕,据说是通过定期人工受孕终于成功。一时间舆论哗然,纵横江湖三十多年公认的...
    林叨叨阅读 533评论 5 5
  • 我和她是大学同学,也算得上是所谓的基友的,闹腾的时候,活脱脱的像个傻子。突然有事惹她不高兴或者反感就冷漠的像个陌生...
    解忧小屋阅读 200评论 0 0
  • 那个老头儿,是在听雨吗?我也不清楚。 刚刚离职的我,从未有过的放松,等同事们下了班,终于可以安心地可以和他们一起边...
    李小蕊_lindery阅读 276评论 2 2