1. 网页爬虫的过程

所谓网页爬虫,就是模拟浏览器的行为访问网站,从而获得网页信息的程序。正因为是程序,所以获得网页的速度可以轻易超过单身多年的手速:)。通常适用于需要大量网页信息的场合。

爬取网页的流程为:访问初始url -> 获得返回的网页,从这个网页中得到新的url并放入待爬队列 -> 访问新的url -> ...依次循环。整体上来看就是一个广度优先的过程,当然,新的url也不一定非要从返回的网页中获得。

一个简单的网页爬虫应该包括以下部分:

  1. 一个url队列。我们的爬虫从这个队列中读取url,并将新的url放入这个队列。这里最重要的是判重。简单的哈希就能达到判重的目的,但是为了节约空间(url的数量往往很多),一般使用bloomfilter的思想。bloomfilter与普通的哈希算法最大的不同就是bloomfilter只需要一个bit来表示某个元素是否存在,所以能节约空间。bloomfilter有一个小缺点,即准确率并不是百分百:判断一个元素是不是已经存在时,已有的有很小的可能会判断为不存在,但是没有的元素一定会判断为不存在。

  2. 网页爬取模块。需要能模拟浏览器发送请求。

  3. 网页分析模块。爬下来的是网页源码,可以用正则或者其他方法提取我们需要的信息。

  4. 新的url生成模块。生成新的url,放入队列。

那么,最简单的爬虫就可以这么写:

import Queue

start_url = "http://www.cnblogs.com/rubinorth"url_queue = Queue.Queue()  # url队列url_queue.put(start_url) 

bloomfilter.put(start_url)#### 一直循环到队列为空 ####while(True):    if url_queue.size() > 0:
        current_url = url_queue.get()  # 队首的url
        page = crawl(current_url)  # crawl为网页爬取模块,page是爬到的网页源代码
        next_urls = deal_page(page)  # deal_page为网页分析模块,next_urls是新的一些url
        
        for next_url in next_urls: 
            if not bloomfilter.has(next_url):  # 判重     
    &
        
		

网友评论