phantomjs代码的说明

时间:2014-08-25 15:00:56

标签: javascript jquery phantomjs

我被要求使用phantomjs处理网络爬虫。但是,当我读完这个例子时,我对一些代码感到困惑:

这是一个循环吗? $("table[id^='post']").each(function(index)

这行代码是什么意思? var entry = $(this);

如何捕获ID? var id = entry.attr('id').substring(4);

此行var poster = entry.find('a.bigusername');尝试从该页面获取用户名。是否有关于如何利用entry.find从页面中删除数据的教程?

page.open(url1, function (status) {
    // Check for page load success
    if (status !== "success") {
        console.log("Unable to access network");
        phantom.exit(231);
    } else {
        if (page.injectJs("../lib/jquery-2.1.0.min.js") && page.injectJs("../lib/moment-with-langs.js") && page.injectJs("../lib/sugar.js") && page.injectJs("../lib/url.js")){
            allResults = page.evaluate(function(url) {
                var arr = [];

                var title = $("meta[property='og:title']").attr('content');
                title = title.trim();

                $("table[id^='post']").each(function(index){
                    var entry = $(this);
                    var id = entry.attr('id').substring(4);
                    var poster = entry.find('a.bigusername');
                    poster = poster.text().trim();
                    var text = entry.find("div[id^='post_message_']");

                    //remove quotes of other posts
                    text.find(".quote").remove();
                    text.find("div[style='margin:20px; margin-top:5px; ']").remove();
                    text.find(".bbcode_container").remove();


                    text = text.text().trim();
                    var postDate = entry.find("td.thead");
                    postDate = postDate.first().text().trim();

                    var postUrl = entry.find("a[id^='postcount']");
                    if (postUrl){
                        postUrl = postUrl.attr('href');
                        postUrl = URL.resolve(url, postUrl);
                    }
                    else{
                        postUrl = url;
                    }

                    if (postDate.indexOf('Yesterday') >= 0){
                        postDate = Date.create(postDate).format('{yyyy}-{MM}-{dd} {HH}:{mm}');
                    }
                    else if (postDate.indexOf('Today') >= 0){
                        postDate = Date.create(postDate).format('{yyyy}-{MM}-{dd} {HH}:{mm}');
                    }
                    else{
                        var d = moment(postDate, 'DD-MM-YYYY, hh:mm A');
                        postDate = d.format('YYYY-MM-DD HH:mm');
                    }

                    var obj = {'id': id, 'title': title, 'poster': poster, 'text': text, 'url': postUrl, 'post_date' : postDate, 'location': 'Singapore', 'country': 'SG'};
                    arr.push(obj);
                });

                return arr;
            }, url);

            console.log("##START##");
            console.log(JSON.stringify(allResults, undefined, 4));
            console.log("##END##");
            console.log("##URL=" + url);

            fs.write("../cache/" + encodeURIComponent(url), page.content, "w");
            phantom.exit();
        }
    }
});

1 个答案:

答案 0 :(得分:0)

  

这是一个循环吗? $("table[id^='post']").each(function(index)

  

这行代码是什么意思? var entry = $(this);

它将jQuery对象分配给变量entry

  

如何捕获ID? var id = entry.attr('id').substring(4);

它使用具有attr()功能的jQuery。