我自己开发的工具,打印出百度贴吧某用户发表过的所有帖子

简介:
<html>
<meta charset="UTF-8"/> 
<style>
a {
    color: green;
    font-family: arial;
    font-weight: bold
}
</style>
<body>
    <div id="container"></div>
</body>
<script src="jquery1.7.1.js">
/* Jerry 2017-02-06 14:58PM update
 should use C:\MyApp\Chrome\Application\chrome.exe --user-data-dir="C:/yaas" --disable-web-security
 and then FIRST LOG ON BAIDU successfully!!!!

*/

</script>
<script>
/* Jerry 2017-02-05 5:54PM
这个警告的意思是说:请求的资源可能会被(扩展/或其他什么机制)屏蔽掉。

之所以会出现这个警告,是因为去获取该资源的请求其实并(还)没有真的发生,所以 Header 里显示的是伪信息,直到服务器真的有响应返回,这里的 Header 信息才会被更新为真实的。不过这一切也可能不会发生,因为该请求可能会被屏蔽。比如说 AdBlock 什么的,当然了不全是浏览器扩展,具体情况具体分析了。

对了,别忘了用 chrome://net-internals 来帮助你查找被屏蔽的请求以及可能的原因。
*/

var PREFIX = "http://tieba.baidu.com";
var START = "http://tieba.baidu.com/i/i/my_tie";
//var START = "http://www.baidu.com";
var POST = {};
var TOTAL = 0;
var SORTED = [];

function getTotalCount(collection){
    var count = 0;
    for( bar in collection){
        if( !collection.hasOwnProperty(bar))
            continue;
        var postList = collection[bar];
        count += postList.length;
    }
    return count;
}

function shouldEnd(previousCount) {
    TOTAL = getTotalCount(POST);
    console.log("pre: " + previousCount + " total: " + TOTAL);
    return ( previousCount == TOTAL );
}

function main() {
    var html = getPostByAJAX(START);
    handleLiChildren(html);
    var page = 2;
    while(1){
        var prevCount = getTotalCount(POST);
        var task = START + "?&pn=" + page;
        var html = getPostByAJAX(task);
        handleLiChildren(html);
        page++;
        /*
        if( page >=2 )
            break;*/
        if( shouldEnd(prevCount) )
            break;
    }
    sort();
    generate();
}

function handleLiChildren(resultString){
    var htmlDom = $(resultString);
    var liChildren = $("li", htmlDom);
    $.each( liChildren, function(i, value) {
        // if( value.className.indexOf("nav_item") != -1 )
        if( value.className)
            return true;
        if( value.innerText == "我回复的" || value.innerText == "我的精品")
            return true;
        var detail = parseDetail(value);
        insertPost(detail);
    });
}

/*
<ul>
    <li>
        <cite>2016</cite>
         <a href="/f?kw=%E5%A4%A7%E9%82%91" >尿素氮</a>
    </li>
    <li>
        <cite>2015</cite>
         <a href="/f?kw=%E5%A4%A7%E9%82%91" >尿素氮2</a>
    </li>
</ul>
*/

function getpostSource(post) {
    var source = "<li><cite>";
    source += post.date + "/<cite>";
    source += '<a href="' + post.url + '">' + post.postTitle + "</a></li>";
    return source; 
}

function getBarPostsSource(barName, posts) {
    var source = '<h1>' + barName + ': ' + posts.length + '个</h1>';
    source += "<ul>";
    for( var i = 0; i < posts.length; i++){
        var post = posts[i];
        source += getpostSource(post);
    }
    source += "</ul>";
    return source;
}

function sortNumber(a,b){
    return b.size - a.size; 
}

function sort() {
    for( barName in POST) {
        if( !POST.hasOwnProperty(barName))
            continue;
        var post = {
            name: barName,
            size: POST[barName].length
        };
        SORTED.push(post);
    }
    SORTED.sort(sortNumber);
}

function generate(){
    var div = document.getElementById("container");
    var source = "总共帖子: " + TOTAL + "个";
    for( var i = 0; i < SORTED.length; i++){
        var posts = POST[SORTED[i].name];
        source += getBarPostsSource(SORTED[i].name, posts);
    }
    div.innerHTML = source;
}

$(function(){ 
    main();
}); 


function getPostByAJAX(requestURL){
   var html = $.ajax({
      url: requestURL,
      xhrFields: {
    // The 'xhrFields' property sets additional fields on the XMLHttpRequest.
    // This can be used to set the 'withCredentials' property.
    // Set the value to 'true' if you'd like to pass cookies to the server.
    // If this is enabled, your server must respond with the header
    // 'Access-Control-Allow-Credentials: true'.
    withCredentials: true
  },
      async: false}).responseText; 
   debugger;
   return html;
}

/*
function getPostByAJAX(requestURL){
 var settings = {
        type: "GET",
        crossOrigin: true,
        url:requestURL,
        error: function(XHR,textStatus,errorThrown) {
            alert ("XHR="+XHR+"\ntextStatus="+textStatus+"\nerrorThrown=" + errorThrown);
        },
        success: function(data,textStatus) {
            debugger;
        },
        headers: {
            "Access-Control-Allow-Origin":"http://tieba.baidu.com",
            "Access-Control-Allow-Headers":"X-Requested-With"
        }
    };
    $.ajax(settings);
}
*/
/*
function getPostByAJAX(requestURL){
   var html = $.ajax({
      url: requestURL,
      dataType:"jsonp",
      xhrFields: {
    // The 'xhrFields' property sets additional fields on the XMLHttpRequest.
    // This can be used to set the 'withCredentials' property.
    // Set the value to 'true' if you'd like to pass cookies to the server.
    // If this is enabled, your server must respond with the header
    // 'Access-Control-Allow-Credentials: true'.
    withCredentials: true
  },
      async: false}).responseText; 
   return html;
}
*/
function insertPost(postDetail){
    if( !POST[postDetail.barName]){
        POST[postDetail.barName] = [];
    }
    POST[postDetail.barName].push(postDetail);
}

function parseDetail(liNode) {
    var cite = $("cite", liNode);
    var date = cite[0].innerHTML; // value1
    var tds = $("td", liNode);
    var a1 = $("a", tds[0]);
    var barName = a1[0].innerHTML; // value2
    var a2 = $("a", tds[1]);
    var postTitle = a2[0].innerHTML; // value3
    var url = PREFIX + a2.attr("href");
    return {
        date: date,
        barName: barName,
        postTitle: postTitle,
        url: url
    }
}
function getTestData(){
    return '<!DOCTYPE html><html><body><div class="wrap1"><div class="wrap2"><div ' + 
    ' id="main_wrapper" class="main_wrapper"><div id="main_back_img"><div ' + 
    ' id="main_back_bottom"><div id="container" class="ibody clearfix"><div><div ' + 
    ' id="content"><div class="simple_block_container"><ul><li><cite>2-16</cite>' + 
    '<div class="wrap_container"><table><tr><td class="nowrap">在<a style="" ' +
    ' href="/f?kw=%E5%A4%A7%E9%82%91" target="_blank">ANDROID吧</a> 发贴</td><td class="wrap">' + 
    '<a href="/p/4356641476?pid=84106363194&amp;cid=0#841063631" class="thread_title"  target="_blank">硬盘</a></td>' +
    '</tr></table></div><div class="clear"></div></li>' + 
    '<li></li><li></li></ul></div></div></div></div></div></div></div></div></body></html>';
}
</script>
</html>

本文来自云栖社区合作伙伴“汪子熙”,了解相关信息可以关注微信公众号"汪子熙"。

相关文章
|
3月前
|
存储 Cloud Native Docker
百度搜索:蓝易云【云原生之使用Docker部署Notepad个人任务管理工具】
这样,你就成功地使用Docker部署了Notepad个人任务管理工具。通过Docker部署Notepad可以使应用的安装和配置更加便捷,并且可以隔离应用环境,避免影响到宿主机的系统。希望以上教程对你有所帮助!如果你有其他问题,请随时继续提问。
56 0
|
4月前
|
Devops 网络安全 Docker
百度搜索:蓝易云【DevOps系列文章之Docker部署web ssh工具sshwifty教程。】
同时,了解DevOps和Docker的基本原理和概念也对你进行部署和管理这样的工具非常有帮助。你可以进一步研究Docker容器化技术和相关的DevOps实践,以更好地理解和应用这些概念。
55 0
|
5月前
|
Java
百度搜索:蓝易云【hutool Http 工具发送POST请求的几种方式。】
以上是使用Hutool发送POST请求的几种方式。根据实际需求和代码复杂度,选择合适的方式来发送POST请求。
173 0
|
6月前
|
NoSQL 关系型数据库 MySQL
百度搜索:蓝易云 ,【Linux工具】-yum/gdb使用教程!
这些是yum和gdb的基本使用教程。希望对您有所帮助!请注意,这只是一个简要概述,这些工具具有更多功能和选项,您可以查阅相关的文档和资料以获取更详细的信息和指导。
59 0
|
7月前
|
缓存 NoSQL Linux
百度搜索:蓝易云【【Linux工具】yum和gdb详细使用教程。】
以上是 yum 和 gdb 的简单使用教程。使用这些工具可以方便地进行软件包管理和程序调试。如需了解更多命令和功能,请参考它们的官方文档或使用相应的帮助命令。
591 0
|
6月前
|
Linux
百度搜索:蓝易云【如何在Linux系统安装文件同步工具:FreeFileSync?】
请注意,具体安装步骤可能会因不同的Linux发行版而有所差异。如果遇到任何问题,建议查阅FreeFileSync的官方文档或论坛,其中可能会提供更详细的安装说明和支持信息。
80 3
|
3月前
|
监控 Ubuntu
百度搜索:蓝易云【如何使用各种工具和命令来检查Ubuntu中的CPU使用情况?】
这些工具和命令可以帮助你实时监控和检查Ubuntu系统中的CPU使用情况。你可以根据需要选择合适的工具来查看CPU使用情况,并根据情况采取相应的措施来优化系统性能。
58 1
|
3月前
|
传感器 监控 自动驾驶
百度Apollo :自动驾驶全新工具Dreamview+,便捷灵活更丰富
百度Apollo :自动驾驶全新工具Dreamview+,便捷灵活更丰富
30 0
|
4月前
|
数据可视化 开发工具 git
Git【实践 01】使用Git工具托管本地代码到GitHub简单易懂的图文教程(含Git+第三方工具TortoiseGit+中文语言包百度云盘资源)
Git【实践 01】使用Git工具托管本地代码到GitHub简单易懂的图文教程(含Git+第三方工具TortoiseGit+中文语言包百度云盘资源)
49 0
|
4月前
|
Shell Windows
Windows【工具 03】QuickLook-3.6.11安装并设置开机自启动(含较难下载的 QuickLook-3.6.11 安装包百度云盘资源)
Windows【工具 03】QuickLook-3.6.11安装并设置开机自启动(含较难下载的 QuickLook-3.6.11 安装包百度云盘资源)
56 0