zoukankan      html  css  js  c++  java
  • Python发现爬虫插件有BUG。

    之前写的爬虫目前需要调优,所以重写。

    我必须做到不依赖数据库,不然的话太麻烦了。

    昨晚睡不着,好好思考了下,发现BUG还有几处。

    今天记录下。

    #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://www.163.com/"
            print "[*] 爬虫目标:"+url
            self.result_list.append({url:0})
            try:
                while True:
                    # 判断爬虫是否有爬过
                    for url_tmp in self.result_list:
                        for url_target in url_tmp:
                            if url_tmp[url_target]==0:
                                # 设置键值
                                url_tmp[url_target]=1
                                # 放入目标队列
                                self.q_list.put(url_target)
    
                    # 判断任务队列是否为空,如果是则直接退出
                    # 否则处理任务
                    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()
                            html=obj._do("get",spider_url)
                            soup=BeautifulSoup(html)
                            links=soup.findAll('a')
                            for link in links:
                                _url=str(link.get('href'))
                                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,spider_url):
                                        continue
                                    else:
                                        print "[*][!] 发现新连接: "+_url
                                        self.result_list.append({_url:0})
                                else:
                                    self.result_list.append({url+_url:0})
                                    print "[*][!] 发现新连接: "+url+_url
                        # rst=list(set(self.result_list))
    
            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")
  • 相关阅读:
    jQuery实现鼠标点击Div区域外隐藏Div
    JS判断输入值为正整数
    trim()不兼容ie的问题及解决方法
    傻问题就用傻办法:解决问题有时候不需要探究根源,依据表象就能直接解决
    /vendor/lib64/libOpenCL.so在安卓应用中无访问权限的解决办法
    复数域上的人工神经网络与量子计算
    中国移动CMCC家庭路由器的默认登陆账号
    717. 1-bit and 2-bit Characters
    219. Contains Duplicate II
    1346. Check If N and Its Double Exist
  • 原文地址:https://www.cnblogs.com/xiaoCon/p/3698785.html
Copyright © 2011-2022 走看看