最近一直在学习stevens的unix网络编程,对于网络通信有了一定的认识,所以也想练练手。聊天程序之前用winsock做过,这次不想做重复的。之前看到一哥们写过windows下抓取猫扑的帖子,我觉得抓页面也是一个不错想法。我也喜欢逛猫扑,有时候也去追追里面写的文章,猫扑帖子少了一个很重要的功能,就是只看楼主的帖子。猫扑水人很多,容易把楼主的帖子淹没在大海里面。
查看了一下猫扑帖子的网页源代码,帖子内容介于<divclass="box2 js-reply"data-rid="*">和</div>之间,只需要解析这段内容,就能得到自己想要的东西。不过里面东西比较多,比较杂,还是先找一个简单页面抓取试试。csdn博客相对来说就是个不错的选择,第一没广告,内容不算很多,第二,代码风格很好。抓CSDN的页面无非获得博主名,文章名字和URL等,如果想获得更多的信息,可以把博主的排名,评论数抓取下来。
下面简单分析一下CSDN博客源代码。
博主标题:
<div id="blog_title">
<h1>
<a href="/lanyan822">编程小子的专栏</a></h1>
<h2>锲而舍之,朽木不折;锲而不舍,金石可镂</h2>
<div class="clear">
</div>
</div>
文章标题和URL:
<span class="link_title"><a href="/lanyan822/article/details/7549916">
ubuntu11.10搭建git服务器
</a>
文章访问次数,评论次数等:
<div class="article_manage">
<span class="link_postdate">2012-05-14 15:09</span>
<span class="link_view" title="阅读次数"><a href="/lanyan822/article/details/7549916" title="阅读次数">阅读</a>(21)</span>
<span class="link_comments" title="评论次数"><a href="/lanyan822/article/details/7549916#comments" title="评论次数">评论</a>(0)</span>
</div>
博客统计信息:
<ul id="blog_rank">
<li>访问:<span>1218次</span></li>
<li>积分:<span>164分</span></li>
<li>排名:<span>千里之外</span></li>
</ul>
<ul id="blog_statistics">
<li>原创:<span>13篇</span></li>
<li>转载:<span>2篇</span></li>
<li>译文:<span>0篇</span></li>
<li>评论:<span>1条</span></li>
</ul>
从上面贴出的HTML可以看出,所需要的信息都在某一个id下,每个id是唯一的,这对解析是很有利的。我们只需要抓取到网页,分析相应内容,得到想要的信息即可。
在确定CSDN博客是可以抓取后,就可以着手抓取。如何抓取?简单来说,就是与CSDN博客服务器简历tcp连接,然后发送HTTP请求,得到响应。页面抓取过程如下图所示: