#coding:utf-8
import sys,urllib2,re,Queue
sys.path.append("..")

from lib.Http_Class import Http_Class
from BeautifulSoup import BeautifulSoup

####################################
#
# Spider 爬虫模块
#
####################################

class Spider_module:
def setW3AScan(self,w3ascan):
self.w3ascan=w3ascan
self.result_list={}
self.q_list=Queue.Queue()
self.tmp_list=Queue.Queue()

def start(self,aa):
url="http://lucifr.com/"
print "[*] 爬虫目标:"+url
self.result_list.update({url:0})
try:
while True:
# 判断爬虫是否有爬过
for url in self.result_list:
if self.result_list[url]==0:
self.q_list.put(url)
self.result_list[url]=1

# 判断任务队列是否为空,如果是则直接退出
# 否则处理任务
if self.q_list.empty():
print "[*] 结束爬虫任务."
break
else:
for tmp in range(self.q_list.qsize()):
spider_url=self.q_list.get()
obj=Http_Class()
try:
html=obj._do("get",spider_url)
except:
self.w3ascan.log_create("url: %s Field! " % spider_url,"Spider_module")
print "url: %s Field! " % spider_url
continue
soup=BeautifulSoup(html)
links=soup.findAll('a')
for link in links:
_url=link.get('href').encode('utf-8')
if re.match('^(javascript|:;|#|mailto)',_url) or _url is None or re.match('.(jpg|png|bmp|mp3|wma|wmv|gz|zip|rar|iso|pdf|txt|db)$',_url):
continue
if re.match('^(http|https)',_url):
if not re.match('^'+url,_url):
continue
else:
if self.result_list.has_key(url):
continue
else:
rst=_url.encode('utf-8')
print "[*][!] 发现新连接: "+rst
self.result_list.update({rst:0})
else:
if self.result_list.has_key(url+_url):
continue
else:
rst=url+_url
print "[*][!] 发现新连接: "+rst.encode('utf-8')
self.result_list.update({rst.encode('utf-8'):0})

except Exception,error:
print "[*] 发生异常情况,捕获并写入日志。"
self.w3ascan.log_create("Url: %s get Url Error! Source: %s" % (url,error),"Spider_module")

def save(self):
print "[*]保存爬虫结果"

def getPluginClass():
return Spider_module

if __name__=="__main__":
t=Spider_module()
t.start("aaa")

最新文章

  1. 学习Struts2的第一个应用步骤
  2. Android studio 出现 Unsupported major.minor version 52.0
  3. React Native 开发之 (04) 例子讲解
  4. atitit groovy 总结java 提升效率
  5. php--yii框架中的ajax分页与yii框架自带的分页
  6. unity3d学习重点记录
  7. (六)6.8 Neurons Networks implements of PCA ZCA and whitening
  8. 指针与strncpy---内存
  9. SGU 187.Twist and whirl - want to cheat( splay )
  10. Python3中的真值测试
  11. Python:matplotlib绘制条形图
  12. php 提取多维数组指定列
  13. Convex Fence
  14. world转html在线编辑器
  15. 公钥与私钥的理解,以及https的应用原理
  16. linux系统编程之信号(七):被信号中断的系统调用和库函数处理方式
  17. java正则表达式(转)
  18. hihoCoder 1261 String Problem II
  19. with异常
  20. swagger (九)

热门文章

  1. 禁用linux的密码策略
  2. Oracle 归档日志管理
  3. 【ABAP系列】SAP ABAP获取域(domain)值的方法
  4. LeetCode.1013-分割数组为三个和相同的部分
  5. 学习Go语言(二)快速入门
  6. CSS未完
  7. java锁机制的面试题
  8. 暴力破解-DVWA_1.9-笔记
  9. jira:恢复数据:AO_187CCC_SIDEBAR_LINK
  10. Almost Sorted Array(o(nlgn)求解LIS)