将兴趣变为工作-我的阅读APP开发之路(三)

将兴趣变为工作-我的阅读APP开发之路(三)_第1张图片
爬虫流程

开发环境

Python 2.7.10
virtualenvs:隔离python开发环境
BeautifulSoup 3.2.1: html 解析三方库
requests 2.13.0: http request三方库


将兴趣变为工作-我的阅读APP开发之路(三)_第2张图片
文件结构
  • 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)

以上两点在脚本中比较重要,这里单独列出来。


喜欢的话,请支持一:https://itunes.apple.com/cn/app/id1212779373?mt=8

你可能感兴趣的:(将兴趣变为工作-我的阅读APP开发之路(三))