开发环境
Python 2.7.10
virtualenvs:隔离python开发环境
BeautifulSoup 3.2.1: html 解析三方库
requests 2.13.0: http request三方库
- sprider_craw.py: 添加要爬的小说url。
- spider_db.py: 数据库操作类,单例对象。
- spider_novel.py: 处理下载小说及相关章节。
- spider_novel.py: 更新已经下载的未完结小说。
- spider_book_update.py: 更新已经下载的未完结小说的状态。
数据库操作,采用的是单例模式:
单例的实现:
#实现__new__方法
#并在将一个类的实例绑定到类变量_instance上,
#如果cls._instance为None说明该类还没有实例化过,实例化该类,并返回
#如果cls._instance不为None,直接返回cls._instance
class Singleton(object):
def __new__(cls, *args, **kw):
if not hasattr(cls, '_instance'):
orig = super(Singleton, cls)
cls._instance = orig.__new__(cls, *args, **kw)
return cls._instance
如何防止被网址拒绝:采用多个User-Agent轮换方式,并且增加延时处理。
headers = ['Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9B176 MicroMessenger/4.3.2',
'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19)',
'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0;Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920)']
header = headers[random.randint(0, 2)]
request.add_header('User-Agent', header)
以上两点在脚本中比较重要,这里单独列出来。