一、实验介绍
1.1 实验内容
基于上节的爬虫,在爬虫的基础上增加一个插件系统,通过爬虫爬取网页链接后调用这个插件系统中的插件进行各种操作,本节也会写个简单的email收集插件作为列子,后面也会讲到如何写各种基于爬虫的插件。
1.2 实验知识点
- python中
__import__
函数 - python如何写一个插件系统
- 简单正则的运用(email查找)
- 扫描器插件系统的工作流程
1.3 实验环境
- python2.7
- win10
二、实验原理
利用python的__import__
函数动态引入脚本,只需要规定脚本如何编写,便可以进行调用,email收集是基于爬虫得到的源码进行正则匹配。上节我们创造了script
这个目录,这个目录里面存放我们编写的python插件。
三、实验步骤
3.1 __import__
函数
我们都知道import是导入模块的,但是其实import实际上是使用builtin函数import来工作的。 在一些程序中,我们可以动态去调用函数,如果我们知道模块的名称(字符串)的时候,我们可以很方便的使用动态调用。 一个简单的代码:
def getfunctionbyname(module_name,function_name):
module = __import__(module_name)
return getattr(module,function_name)
通过这段代码,我们就可以简单调用一个模块的函数了。
3.2 插件系统开发流程
一个插件系统运转工作,主要进行以下几个方面的操作
- 获取插件,通过对一个目录里的以
.py
的文件扫描得到 - 将插件目录加入到环境变量
sys.path
- 爬虫将扫描好的url和网页源码传递给插件
- 插件工作,工作完毕后主动权还给扫描器
3.3 插件系统代码
在lib/core/plugin.py
中创建一个spiderplus
类,实现满足我们要求的代码。
#!/usr/bin/env python
# __author__= 'wanggangdan'
import os
import sys
class spiderplus(object):
def __init__(self,plugin,disallow=[]):
self.dir_exploit = []
self.disallow = ['__init__']
self.disallow.extend(disallow)
self.plugin = os.getcwd()+'/' +plugin
sys.path.append(plugin)
def list_plusg(self):
def filter_func(file):
if not file.endswith(".py"):
return False