17搜索如何抓全网页

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 &gt;</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),一个搜索爱好者,同时也只是一个初学者,欢迎大家提出宝贵意见,大家一起分享,一起成长。

原文地址:https://www.cnblogs.com/siliconvalley/p/3108591.html