爬取教务处网站

作者: shiy4n | 来源:发表于2016-11-24 22:29 被阅读141次

    最近写了一个课程助手类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  


    相关文章

      网友评论

        本文标题:爬取教务处网站

        本文链接:https://www.haomeiwen.com/subject/jshipttx.html