由于有大量的IO,多线程可以提高爬取的效率。出于不同队列存储不同url和对于爬虫进行分工的初衷,这里实现了两个队列shareMonthQueue和shareReportQueue。其中shareMonthQueue存储所有月份初始url和包含的其他页面(一个月份有很多page,例:1946年5月包含30个page)。shareReportQueue存储所有新闻的url。两个队列有其专用的爬虫monthSpider和reportSpider。师兄说:从操作系统的角度来看,两个队列是多此一举,增加代码复杂度,并不提高效率。我想了想,师兄说的对。
上代码:
#coding:utf-8
#author:zhangyang
#date:2015-5-21
#此程序用于爬取人民日报下的数据资源。主页面需要提取包括1946年到2003年之间所有月份
#次级页面是各个月份的所有报道
#末级页面是报道内容
#使用多线程提高爬取效率
import urllib2,bs4,os,re
from time import clock
import threading,Queue
#关于bs4解析url的方法可以参看:http://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
starturl="http://rmrbw.info/"
shareMonth