1.抓取内容
搜索引擎基本框架有了,但是收录些什么内容才有意义呢,新闻和博客是我最初的两个想法,抓取新闻可以做一个类似百度新闻(http://news.baidu.com/)的平台,最后发现难度略大,加以感觉意义不大,遂无功而返。基于我平时搜索技术问题时对CSDN博客的内容比较信任甚至偏爱,最终选择抓取博客园、CSDN、月光博客等技术博客文章。
2.如何抓全
网页抓全是考核爬虫系统最重要的指标之一,如果网页都没收录,谈何查询,下面以博客园、CSDN、月光博客为例一一讲解。
2.1博客园http://www.cnblogs.com
(1)确定抓取博客园/编程语/cpp文章。种子url http://www.cnblogs.com/cate/cpp/
(2)确定种子url。因为每个主题有很多页,http://www.cnblogs.com/cate/cpp/1-N,首先将种子url设为http://www.cnblogs.com/cate/cpp/1,然后分析出最后一页一起存 入种子URL队列。
(3)分析主题页数。庆幸的是博客园有提供最后一页的URL,
<div class="pager"><a href="/cate/cpp/" class="p_1 current" onclick="aggSite.loadCategoryPostList(1,20);buildPaging(1);return false;">1</a>
<a href="/cate/cpp/2" class="p_2" onclick="aggSite.loadCategoryPostList(2,20);buildPaging(2);return false;">2</a>
<a href="/cate/cpp/3" class="p_3" onclick="aggSite.loadCategoryPostList(3,20);buildPaging(3);return false;">3</a>
<a href="/cate/cpp/4" class="p_4" onclick="aggSite.loadCategoryPostList(4,20);buildPaging(4);return false;">4</a>
<a href="/cate/cpp/5" class="p_5" onclick="aggSite.loadCategoryPostList(5,20);buildPaging(5);return false;">5</a>
<a href="/cate/cpp/6" class="p_6" onclick="aggSite.loadCategoryPostList(6,20);buildPaging(6);return false;">6</a>
<a href="/cate/cpp/7" class="p_7" onclick="aggSite.loadCategoryPostList(7,20);buildPaging(7);return false;">7</a>
<a href="/cate/cpp/8" class="p_8" onclick="aggSite.loadCategoryPostList(8,20);buildPaging(8);return false;">8</a>
<a href="/cate/cpp/9" class="p_9" onclick="aggSite.loadCategoryPostList(9,20);buildPaging(9);return false;">9</a>
<a href="/cate/cpp/10" class="p_10" onclick="aggSite.loadCategoryPostList(10,20);buildPaging(10);return false;">10</a>
<a href="/cate/cpp/11" class="p_11" onclick="aggSite.loadCategoryPostList(11,20);buildPaging(11);return false;">11</a>···
<a href="/cate/cpp/29" class="p_29" onclick="aggSite.loadCategoryPostList(29,20);buildPaging(29);return false;">29</a>
<a href="/cate/cpp/2" onclick="aggSite.loadCategoryPostList(2,20);buildPaging(2);return false;">Next ></a></div>
红色部分就是该主题最大的页数,找出后只要抓取1-29页的内容就可以了。
2.2CSDNhttp://blog.csdn.net/
(1)抓取思想的博客园基本一致。种子url http://blog.csdn.net/code/index.html?page=1-N。
(2)分析最大页。
<div class="page_nav">
<span> 876条数据 共30页</span><a href="/code/index.html?page=1">首页</a> <a href="/code/index.html?page=1">上一页</a> <a href="/code/index.html?page=1">1</a> <strong>2</strong> <a href="/code/index.html?page=3">3</a> <a href="/code/index.html?page=4">4</a> <a href="/code/index.html?page=5">5</a> <a href="/code/index.html?page=6">...</a> <a href="/code/index.html?page=3">下一页</a> <a href="/code/index.html?page=30">尾页</a>
</div>
2.3月光博客http://www.williamlong.info/
(1)抓取思想和博客也基本一致,会有一点点不同, 种子url http://www.williamlong.info/cat/?cate=8&page=1-N。
(2)分析最大页。遗憾的是月光博客没有在第一页源码中给我们提供最大页,但是经过测试,访问月光博客不存在的页面会提示未知错误,即无法访问,所以可以利用HTTP1.1返回报文头的状态码来判断最大页N。http://www.williamlong.info/cat/?cate=8&page=N1可访问,http://www.williamlong.info/cat/?cate=8&page=N1+1不能访问,最大页即是N1,这里可以定义一个最大页MAX,用二分查找的方法确定N1的大小。
3.具体抓取
来自不同的博客文章的url会有各自的特点,对种子URL抓回的网页进行解析,抓取符合条件的url即可,更多细节不多赘述。
---------------------------
我是爱谷歌(agoogle),一个搜索爱好者,同时也只是一个初学者,欢迎大家提出宝贵意见,大家一起分享,一起成长。