长期逛天涯社区,许多的经典的帖子都有许多页,而且里面还夹杂了大量的回复或者广告,不能像MOP一样只看楼主,这样阅读起来非常不便,故此写了一个小程序实现离线阅读并只看楼主功能。实现的思路是通过HttpWebRequest取得要查看的网页内容,然后用正则表达式将其中感性趣的部分取出来,我主要取了分页信息,同时分离出了各贴以及作者,这样可以实现查看任意一个人帖子的功能,如果需要的话可以将取出的数据保存在本地硬盘中以方便查看,在这个程序没有作本地保存。程序中的主要代码部分有:
1、从指定网址下载网页

publicstringGet_SourceHtml(stringa_strUrl)
{

stringstrResult;
try{
                HttpWebRequest myReq
=(HttpWebRequest)HttpWebRequest.Create(a_strUrl);
                myReq.Timeout
=60000;
                HttpWebResponse HttpWResp
=(HttpWebResponse)myReq.GetResponse();
                Stream myStream
=HttpWResp.GetResponseStream();
                StreamReader sr
=newStreamReader(myStream, Encoding.Default);
                strResult
=sr.ReadToEnd();
                myStream.Close();
            }
catch(Exception exp)
{
                strResult
="错误:"+exp.Message;
            }
returnstrResult;
        }

2、分离出帖子正文

publicstringSplitHtml(stringhtmlContent)
{
stringresult=htmlContent;

//剪切掉正文后面的内容Regex regexObj=newRegex("</div><center>");

            Match m
=regexObj.Match(result);

if(m.Value!=string.Empty)
{
                result
=result.Substring(0, result.IndexOf(m.Value));
            }
            
//清除掉广告regexObj=newRegex(@"<center><IFRAME(.|\s)+?</IFRAME></center>");
            result
=regexObj.Replace(result,"");

//剪切掉正文前面的内容
//regexObj = new Regex("<TABLE align=center border=0 cellSpacing=0 width='100%'>");regexObj=newRegex(@"<span id='AddMyDigest'></span>");

            m
=regexObj.Match(result);

if(m.Value!=string.Empty)
{
                result
=result.Substring(result.IndexOf(m.Value));
            }

returnresult;
        }

3、获取指定作者的发帖在本地生成新的Html文件以便在程序内嵌浏览器中查看

publicstringGetAuthorsContent(stringSourceHtml,stringAuthorName)
{
            StringBuilder html
=newStringBuilder();

            html.Append(
"<Html><body>");

            SourceHtml
=SplitHtml(SourceHtml);

            Regex r
=newRegex(@"<TABLE(.|\s)+?</table>");
            MatchCollection ms
=r.Matches(SourceHtml);

for(inti=0; i<ms.Count-2; i++)
{
                Match m
=ms[i];
intstart=SourceHtml.IndexOf(m.Value)+m.Value.Length;

stringtitle=m.Value;
                Regex re
=newRegex(@"k>(.|\s)+?<");
                Match m1
=re.Match(title);

stringauthor=m1.Value;
if(author.Length>0)
                    author
=author.Substring(2, author.IndexOf("<")-2);
if(author==AuthorName)
{
                    html.Append(title);

                    Match NextMatch
=ms[i+1];
stringcontent;
if(NextMatch!=null)
                        content
=SourceHtml.Substring(start, SourceHtml.IndexOf(NextMatch.Value)-start);
else                        content=SourceHtml.Substring(start);

                    html.Append(content);
                    html.Append(
"<br>");
                }
            }
            html.Append("</body></html>");

returnhtml.ToString();
        }

4、获取分页数据

publicList<PageData>GetPages(stringSourceHtml)
{
            SourceHtml
=SplitHtml(SourceHtml);

            Regex r
=newRegex(@"http:.+?((\[\d+\])|首页)");
            MatchCollection ms
=r.Matches(SourceHtml);

            List
<PageData>pages=newList<PageData>();

foreach(Match minms)
{
                r
=newRegex("><.+?>");
strings=r.Replace(m.Value,"");
                s
=s.Replace(">","");

if(s.IndexOf("首页")>=0)
                    pages.Add(
newPageData(s.Substring(0, s.IndexOf("首页")),"首页"));
else                    pages.Add(newPageData(s.Substring(0,s.IndexOf("[")),s.Substring(s.IndexOf("["))));
            }

returnpages;
        }

完整源代码点击下载

转载于:https://www.cnblogs.com/happy555/archive/2007/10/08/916818.html

天涯社区离线阅读器(实现只看楼主功能)相关推荐

  1. 实现sohu社区′只看楼主′的功能,抓取连载帖子中楼主的所有帖子

    sohu社区(http://club.sohu.com/main.php),经常有一些不错的连载的帖子,少则几千个回复,多则可以上万个,可是最有用最想看的楼主的帖子也就几十个,从这些成千上万的帖子中, ...

  2. java 实现百度贴吧“只看楼主”

    这个功能主要是:先确定帖子的地址,然后获取html代码, 通过jsoup解析html, 然后把楼主发的提取出来保存到book.html 除了jsoup的使用, 更多的是要看贴吧帖子的大体结构: 1.先 ...

  3. Python爬虫实战(二):爬取天涯帖子(只看楼主)

    先上代码 #coding=utf-8 import requests from bs4 import Tag from bs4 import BeautifulSoup def getHtml(url ...

  4. 写个码农们:从业互联网13年,才觉得卖卤菜比找风投上市靠谱只看楼主

    10年风雨坑爹人生,略略回顾 -----------------------------回顾开始-------------------------------- [黑客登场]十多年前的一天晚上,警察突 ...

  5. 孙悟空是如何混出人样的?只看楼主收藏

    孙悟空本来是一介凡人,后来学了一身绝世本事,金丹术.地煞术.七十二般变化和筋斗云,在花果山过得不晓得多自在,已经算是有模有样了,但是,在天庭仙界看来,这点成就实在不足为道. 孙猴子对此也甚为不满,羡慕 ...

  6. 随手正则写的 CSDN【只看楼主】功能

    写这个的时候居然没有看到原来CSDN已经有这个功能了,写完代码了突然发现原来早就已经有了. 现把代码贴出来吧,虽然有很多解析HTML的开源类库如:http://htmlagilitypack.code ...

  7. 上下五千年。。成功之路。。。都离不开老庄孙子。。。只看楼主 收藏 回复

    "大师啊,你怎么看待老子的成功呢?" "老子的成功啊,离不开八个字,忍辱偷生顺其自然" "那大师怎么看待庄子的成功呢?" "庄子的 ...

  8. Zeal —— API文档离线阅读器

    背景 在软件开发的过程中,常常需要查阅多个API文档,但网络环境等因素常常导致在线文档查看用户体验并不佳.为此,介绍一款离线的API文档阅读器,Zeal.Zeal中自配了多种API文档可供查阅,如El ...

  9. 小说阅读器 免费源码 高颜值 功能齐全

    最近自己做了个小说阅读器,就是下面这个东西啦,目前仅支持Window系统 软件的特点: 导入本地txt书籍,自动提取目录: 记录阅读进度,下次打开自动跳转至上次离开位置: 支持书籍分组管理,可以自己创 ...

  10. office电子书_掌阅推出首款彩屏电子书阅读器,用它看漫画体验到底如何?

    它作为传统电子书阅读器的延伸,在保留护眼.省电等特性的基础下,还可以显示彩色内容. 从 1996 年诞生于麻省理工实验室起,电子墨水屏技术已经发展了 20 多年,不过它的变化好像一直很少,最常见的应用 ...

最新文章

  1. Cesium调用 WMS 、WMTS 服务
  2. Kubernetes — 控制器
  3. 大数据为何让传统银行焦虑?
  4. Java动态生成类以及动态添加属性 本篇文章来源于 Linux公社网站(www.linuxidc.c
  5. LeetCode-两个结构分别遍历,然后合并
  6. Eclipse Memory Analyzer以及内存泄露的原因
  7. lodash源码分析之compact中的遍历
  8. 和gdi绘图效率比较_绘图计算器测评来袭!哪一款才是你AP考试的最佳拍档?
  9. LeetCode 515. 在每个树行中找最大值(广度优先搜索)
  10. kernighan lin算法
  11. node 版本管理器 之 nvm 安装与使用
  12. dhcp服务配置 [Linux] 超详细的步骤!学不会你打我!
  13. 【机器人学:运动规划】快速搜索随机树(RRT---Rapidly-exploring Random Trees)入门及在Matlab中演示
  14. 家用电器插头插座外壳防冲击等级试验——IK摆锤冲击试验装置
  15. 【JAVA基础速过】第3章 数组+Arrays工具类的使用
  16. 网络会变的有自我意识吗
  17. 最佳联盟营销软件解决方案:简化你的联盟管理
  18. 《医疗器械软件注册指导原则》阅读笔记
  19. 计算机存储单位--“大数据”概念
  20. 查看电脑IP端口配置/Windows Ipconfig命令教程

热门文章

  1. R语言-主成分分析和聚类分析实操(包含源码)
  2. 领域驱动设计思维导图
  3. Sqlmap 常用命令
  4. 21岁雅虎卖身引发一波怀旧 市值曾高达1250亿美元
  5. 松下A6驱动面板操作参数设置与保存
  6. 金融计量学实验报告一
  7. vue 年月日时分秒毫秒
  8. excel部分网格线不见了_EXCEL-绘制箱形图
  9. fcm算法的MATLAB实现
  10. android 对话框窗口,Android 对话框详解(一)