03crawler01 爬取直播电视剧列表

不知道 大家没事的时候, 上不上一些直播平台瞅一愁, 有时候 你去翻列表, 是不是感觉眼睛都要花了, 你完全可以写一个爬虫程序所有的感兴趣的数据下载下来, 然后再自己慢慢的来搜索了呗
一般来说 直播平台是分页的, 你可以将你感兴趣的栏目的所有的直播节目的相关信息下载下来, 然后 寻找自己感兴趣的直播节目

为了 简单, 我们这里只下载一个栏目的一个页面的直播信息
接下来 我们来实现一个功能, 抓取下面的页面的所有的电视剧的电视剧的名字 以及链接 [基于crawler.jar]

浏览器访问画面 :
03crawler01 爬取直播电视剧列表_第1张图片

结果截图 :
03crawler01 爬取直播电视剧列表_第2张图片
03crawler01 爬取直播电视剧列表_第3张图片

图中可能有一些乱码, 但是, 我没有找到原因所在…

代码如下 :

/**
 * file name : Test11CrawlForDouyu01GameList.java
 * created at : 9:32:38 PM Sep 5, 2015
 * created by 970655147
 */

package com.hx.crawler;

public class Test11CrawlForDouyu03ProductList {

    // 测试站点 : http://www.douyutv.com/directory/game/LOL
    // 获取游戏房间信息
    public static void main(String []args) throws Exception {

        String url = "http://www.douyutv.com/directory/game/dy";
        Map params = new HashMap<>();
        params.put(Tools.TASK, "roomList");
        params.put(Tools.SITE, "douyu");
        params.put(Tools.PAGE_NO, "0");

        ScriptParameter singleUrlTask = Tools.newSingleTask(HtmlCrawler.newInstance(), url, params);

        parse(singleUrlTask);

    }

    // parse 接口
    // 1. 获取目录
    // 2. 将目录信息传递给下一个脚本
    public static void parse(ScriptParameter scriptParameter) throws Exception {
        String nextStage = Tools.Test11CrawlForDouyu04ProductInfo;

        SingleUrlTask singleUrlTask = (SingleUrlTask) scriptParameter;
        Crawler crawler = singleUrlTask.getCrawler();
        String url = singleUrlTask.getUrl();
        Map param = singleUrlTask.getParam();

        String xpath = "{\"name\":\"roomList\",\"xpath\":\"/html/body//li/a[@class='list']\",\"values\":[{\"name\":\"name\",\"attribute\":\"title\"},{\"name\":\"url\",\"attribute\":\"href\"}]}";
        xpath = Tools.getRealXPathByXPathObj(xpath);

        // ------------------------1------------------------------
        StringBuilder sb = new StringBuilder();
        long start = System.currentTimeMillis();
        Tools.appendCRLF(sb, "URL : " + url, true);
        Tools.appendCRLF(sb, "--------------------- [" + Tools.getTaskName(singleUrlTask) + "start ...] --------------------------");
        Log.log(sb.toString());

        CrawlerConfig config = new CrawlerConfig();
        config.setTimeout(30 * 1000);
        Page page = crawler.getPage(url, config);
        String html = page.getContent();
        html = new String(html.getBytes(), "utf-8");

//      Log.log(html);
//      Tools.save(html, Tools.getTmpPath(7));
//      Tools.getPreparedDoc(url, html, Tools.getTmpPath(7));
        JSONArray fetchedData = Tools.getResultByXPath(html, url, xpath);


        long spent = System.currentTimeMillis() - start;
        Tools.appendCRLF(sb, fetchedData.toString(), true);
        Tools.appendCRLF(sb, "--------------------- [crawl" + Tools.getTaskName(singleUrlTask) + "end ...] --------------------------");
        Tools.appendCRLF(sb, "spent " + spent + " ms ...");
        Log.log(sb.toString());


        // ------------------------2------------------------------
        if(! fetchedData.isEmpty()) {

        }

    }

}

当然这里 只是一个简单的示例, 更多的想法, 大家可以任由自己的思路

注 : 因为作者的水平有限,必然可能出现一些bug, 所以请大家指出!

你可能感兴趣的:(04,工具)