Beispiel #1
0
    def trans_d(self,tem_url,rawurls):
        '将收获的url转化为 相对于局部主地址的绝对地址 并将其加入到inqueue中'
        urltest=Urltest() #对url的相关处理

        while True:
            if len(rawurls)>0:
                item=rawurls.pop()
                urlte=item
            else:
                break
            if (item == None)or(len(item)<3):   
                break  
            if item[0:4] == '\r\n':   
                item = item[4:]   
            if item[-1] == '/':   
                item = item[:-1]   
            #ipurl
            #change url to direct url
            #already direct url
            if len(item) >= len('http://') and item[0:7] == 'http://':
                for homepage in self.home_list: 
                    #change wheather it is a subpage
                    length=len(homepage)
                    if len(item) >= length and item[0:length] == homepage:   
                        if self.list.find(item) == False:   
                            self.inqueue.put(item)   
                        break
                continue #return to while
            if item[0:5] == '/java' or item[0:4] == 'java':   
                pass
            else:
            #相对地址开始 tem_url为局部home_url
                #相对地址 #更新: 对于../进行退格处理
                if item[0:3]=='../':
                    item=self.urltest.absUrl(tem_url,item)
                elif item[0] != '/':   
                    item = '/' + item   
                    item = tem_url+ item   #使用局部home_url代替了homeurl
                elif item[:2]=='./':
                    item=tem_url+item[2:]
                #item=urltest.absDirUrl(item) #绝对地址再次进行处理
                if self.list.find(item) == False:   
                    self.inqueue.put(item) 
            #记录链接情况
            self.Flcok.acquire()  
            confile = open('../store/urltest.txt', 'a')  
            confile.write( tem_url+' '+urlte+ ' ' + item+ '\n')  
            confile.close()  
            self.Flcok.release()  
Beispiel #2
0
 def __init__(self,
              Name,
              queue,
              list,
              result,
              Flcok,
              inittime=0.00001,
              downloadway='./',
              configfile='D:\\bbs\\conf.txt',
              maxnum=10000):
     threading.Thread.__init__(self, name=Name)
     self.queue = queue
     self.result = result
     self.Flcok = Flcok
     self.inittime = inittime
     self.mainway = downloadway
     self.configfile = configfile
     self.num = 0  #已下载的网页个数
     self.maxnum = maxnum
     self.way = downloadway + self.getName() + '\\'
     self.list = list
     self.urltest = Urltest()  #链接的相关操作对象
     #加入了主  home_url
     #
     self.home_list = [
         'http://www.cau.edu.cn',
         #'http://202.205.80.215',
         'http://org.wusetu.cn/hsz',
         #'http://202.205.91.91/hsz'
         #五色土开始
         #'http://wusetu.cn/logok.htm',
         'http://online.wusetu.cn',  #社区论坛 无需要登录
         #'http://home.wusetu.cn',  #个人空间,需要登录 价值不大
         #'http://flash.wusetu.cn', #福来乐娱乐游戏 不许要登录
         #'http://vod.cau.edu.cn', #机网中心 影视剧场
         #'http://music.cau.edu.cn',#音乐
         #'http://v.cau.edu.cn',#校内在线 电影 校内浏览器
         #未爬PT
     ]
     self.ip_list = {
         #'http://202.205.80.215':'http://www.cau.edu.cn',
         'http://202.205.91.91': 'http://org.wusetu.cn'
     }
     self.inqueue = queue  #处理完后的URL的去处  有效queue
Beispiel #3
0
    def find(self, num):
        #查找的时候,很小心的哦
        #查找时 默认查找带url而非ip  如果为ip开头  则自动将ip转为对应url
        #对不能解析的文件进行过滤:
        #如果末尾有.存在,且不为cn com org等  去除
        urltest = Urltest()
        if not urltest.test(num):
            return True

        l = len(self)
        first = 0
        end = l - 1
        mid = 0
        if l == 0:
            self.insert(0, num)
            #print 'input ',num
            return False
        while first < end:
            mid = (first + end) / 2
            if num > self[mid]:
                first = mid + 1
            elif num < self[mid]:
                end = mid - 1
            else:
                break
        if first == end:
            if self[first] > num:
                self.insert(first, num)
                #print 'input ',num
                return False
            elif self[first] < num:
                self.insert(first + 1, num)
                #print 'input ',num
                return False
            else:
                return True

        elif first > end:
            self.insert(first, num)
            #print 'input ',num
            return False
        else:
            return True