(Photo byAaron BurdenonUnsplash)
这两天将半年前写的爬虫代码重构了一下,本来以为要不了多久,结果前前后后花了我将近4个小时的时间。
无力吐槽!
半年前的代码是一个面向过程的处理,几个函数顺序执行,最终慢悠悠地把PDF生成出来,功能都齐全,但是可读性和拓展性极差。现在全部改为面向对象处理,将requests.Session操作剥离出来作为Crawler类,将解析网页的操作剥离出来作为Parse类,结构清楚了很多,耦合度(较之前)大大降低,基本达到我的要求。
整体功能实现后,我写了一个cache函数,将Session操作缓存起来方便后续复用,本地调试成功,但最终没有采用。我的设想是在一定期限内将Session操作常驻内存,每次执行前检查缓存中有没有,有的话就直接用,没有才新建。但这个cache函数在程序执行完后,缓存的内容直接被释放,每次执行都需要新建Session连接。搜了一下,估计我想要的效果得用redis才能实现,这两天正在学,下一个版本再把redis加上去。
在将网页生成HTML文件到本地后,使用pdfkit工具将HTML文件转换为PDF很耗费时间,这一点请大家注意。
环境准备Mac os 10.11.6 + Anaconda Navigator 1.7.0+ Python 2.7.12 + Sublime 3.0技术要点
Requests会话处理
BeautifulSoup网页解析
pdfkit工具(注意,一定要先安装wkhtmltopdf这个工具包)
decorator装饰器
代码实现
领取专属 10元无门槛券
私享最新 技术干货