<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&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>
分享到:
相关推荐
【百度贴吧脱水工具】是一种专门针对百度贴吧的帖子内容进行整理和保存的软件工具,它的主要功能是将用户在百度贴吧中发布的连载帖子或长篇讨论内容转换为方便阅读和管理的TXT文本格式。这样的工具对于那些喜欢收藏...
通过查询排名,用户不仅能了解自己关注的贴吧在所有贴吧中的位置,还能发现热门和新兴的贴吧,从而拓展自己的兴趣领域。 除了以上主要功能,我们还可以探讨一下百度贴吧查询工具可能涵盖的其他辅助特性。例如,它...
【百度贴吧管理工具】是一款专为百度贴吧设计的高效管理软件,旨在帮助吧主和吧内成员更加便捷地监控和维护贴吧的秩序。这款工具具备实时监控、批量操作以及智能报警等一系列功能,极大地提升了贴吧管理的效率。 1....
【标签】:“完整版百度贴吧管理工具.e.ra”这个标签再次强调了这个工具的完整性,意味着它可能包含了所有必要的组件,让用户无需额外安装其他插件或应用,即可实现对百度贴吧的全方位管理。 【压缩包子文件的文件...
每个主题被称为一个“贴吧”,用户在贴吧内发表帖子、回帖,进行互动。 2. **签到功能**:签到是许多社交平台常见的用户活跃度激励机制,用户每天访问或参与某项活动时进行签到,可积累积分、获得奖励。在百度贴吧...
标题中的“百度贴吧一键签到工具电脑版(奈忧如制作)”指的是一个专为百度贴吧用户设计的小型应用程序,旨在简化用户在贴吧的每日签到流程。这个工具是由一个名为“奈忧如”的开发者使用VB(Visual Basic)编程语言...
在本教程的压缩包中,"爬虫开发_基于Python实现爬取百度贴吧某话题下的所有图片"可能是源代码文件,包含完整的爬虫实现。通过阅读和理解这个代码,你可以学习到如何结合Python的这些库来实现一个实用的爬虫项目。 ...
“石青百度贴吧工具1.9.1”是一款专为百度贴吧用户设计的辅助软件,旨在提升用户在贴吧的使用体验和操作效率。该版本的更新主要集中在功能优化和问题修复上,下面我们将详细探讨这些变化以及它们背后的技术原理。 ...
标题中的“VB开发的百度贴吧分析工具源代码”揭示了这个压缩包文件的主要内容,它是一个用Visual Basic(VB)编程语言编写的程序,用于分析百度贴吧的数据。百度贴吧是百度旗下的一个在线论坛平台,用户可以围绕特定...
【百度贴吧推广大师】是一款专门针对百度贴吧平台设计的高效网络营销工具,旨在帮助企业和个人用户提高在百度贴吧中的知名度和影响力。通过自动化和智能化的手段,它能够帮助用户实现精准定位目标群体,进行有效推广...
【百度贴吧楼主抓取机】是一款专门用于从百度贴吧中高效、批量地抓取指定贴吧内楼主(主题帖发布者)信息的工具。它通过自动化的方式,帮助用户收集和整理大量贴吧中的帖子数据,便于进行数据分析、研究或者信息管理...
【标题】:“百度贴吧一键签到工具” 在互联网社区中,百度贴吧是一个非常活跃的讨论平台,用户可以加入各种主题的“贴吧”进行交流。为了增加用户的参与度和黏性,百度贴吧推出了签到功能,用户每日登录并签到可以...
【百度贴吧帖子图片下载器】是一款专为用户设计的工具,用于从百度贴吧这个中国最大的网络社区论坛中高效地下载指定帖子内的所有图片。这款软件能够帮助用户批量获取帖子内的图像资源,方便收藏、研究或者备份,尤其...
【百度贴吧批量清粉工具】是一款专为百度贴吧用户设计的辅助软件,旨在帮助用户高效地清理账号中的“僵死粉”,即那些长期无互动、无活跃度的粉丝。这款工具利用贴吧cookie登录系统,能够快速查找并区分出那些不再...
【百度贴吧图片下载工具】是一款专门针对百度贴吧用户设计的实用软件,它的主要功能是帮助用户轻松快捷地下载贴吧中的所有图片。这款工具极大地方便了那些喜欢收集、整理或研究贴吧图片的用户,使他们无需手动一张张...
百度贴吧是中国互联网上一个非常活跃的社区论坛,用户可以在各个主题吧中发表帖子、参与讨论。每个贴吧都有签到功能,用户每天登录并签到可以获得积分,这些积分可以用来提升等级、兑换奖励等。然而,对于经常参与多...
在IT行业中,网络社区是人们交流、分享信息的重要平台,其中百度贴吧作为中国最大的网络社区之一,拥有庞大的用户群体和话题讨论区。本教程将详细讲解如何利用多账号策略进行有效的帖子顶贴,以实现帖子在百度贴吧中...
百度贴吧是百度公司推出的一个社区交流平台,用户可以创建或参与各种主题的讨论,发表观点,与其他吧友互动。随着时间的推移,贴吧的内容会变得庞大,管理起来可能会遇到各种挑战,如不良信息的传播、恶意用户的捣乱...
模拟百度贴吧系统,MVC+structs结构、本系统类似于百度贴吧,用户可以发帖,回帖,查看帖子内容,查看发帖人信息及其发过的所有帖子,创建贴吧等功能。 匿名用户只可以回帖,不可以发帖及创建贴吧。 搜索帖子时可以...