示例#1
0
 def getUrls(self):
     '''
     :获取给定页面的所有超链接
     '''
     gh = GetHtmlText()
     pp = PreProcess()
     soup = gh.getHtml(self.url)
     if not soup:
         return None
     links = soup.findAll('a', href = True)              #超链接html标志
     urls = []
     if self.url.strip().endswith('/'):                  #拼接链接时防止出现两个斜杆相邻
         self.url=self.url.strip()[:-1]
     for link in links:
         link = link.get('href')
         pattern0 = re.compile(r'^\./')                  #本网站的链接不带http等协议开头的,直接以'./'开头
         pattern1 = re.compile(r'^(/\w+)')               #以'/'开头不带协议的本站链接
         pattern2 = re.compile(r'^(htt\w+)')             #带http协议的链接
         if pattern0.match(link):                        #此类链接需要拼接,拼接时去除'.'符号
             link = self.url + link[1:]
             link = pp.preProcess(link)
             if link:
                 urls.append(link)
         elif pattern1.match(link):                      #此类链接直接拼接即可
             link = self.url + link
             link = pp.preProcess(link)
             if link:
                 urls.append(link)
         elif pattern2.match(link):                      #此类链接需要特殊处理,链接没有问题之后就直接添加
             link = pp.preProcess(link)
             if link:
                 urls.append(link)
     return set(urls)
 def getAlexa(self,url):
     '''
     :从Alexa网站上获取全球排名中文排名信息
     :param url:待获取排名信息的超链接
     '''
     if ggv.pterminate:return None
     ranks = []
     numR = 0
     gd = GetDomain()
     domain = gd.getDomain(url)                          #提取超链接的域名
     url = cgv.alexaUrl + domain
     time.sleep(10)                                      #休眠10秒
     htmlText = GetHtmlText()
     soup = htmlText.getHtml(url)                        #获取网页源码,不能直接根据网页文本进行判断,因为有的信息不存在
     if soup:
         rankrow = soup.findAll('div',{'class':'rank-row'})
         for rk in rankrow:
             rkl = rk.find('div')
             if type(rkl) == types.NoneType:
                 continue
             numR += 1
             rank = rkl.find('a').text                   #如果有排名,排名处会出现超链接
             ranks.append(rank)
         if numR < 2:
             ranks.append('-')
     else:                                               #没有相关标志则表示不存在
         ranks.append('-')
         ranks.append('-')
     return ranks
 def getUrls(self):
     '''
     :获取给定页面的所有超链接
     '''
     gh = GetHtmlText()
     pp = PreProcess()
     soup = gh.getHtml(self.url)
     if not soup:
         return None
     links = soup.findAll('a', href=True)  #超链接html标志
     urls = []
     if self.url.strip().endswith('/'):  #拼接链接时防止出现两个斜杆相邻
         self.url = self.url.strip()[:-1]
     for link in links:
         link = link.get('href')
         pattern0 = re.compile(r'^\./')  #本网站的链接不带http等协议开头的,直接以'./'开头
         pattern1 = re.compile(r'^(/\w+)')  #以'/'开头不带协议的本站链接
         pattern2 = re.compile(r'^(htt\w+)')  #带http协议的链接
         if pattern0.match(link):  #此类链接需要拼接,拼接时去除'.'符号
             link = self.url + link[1:]
             link = pp.preProcess(link)
             if link:
                 urls.append(link)
         elif pattern1.match(link):  #此类链接直接拼接即可
             link = self.url + link
             link = pp.preProcess(link)
             if link:
                 urls.append(link)
         elif pattern2.match(link):  #此类链接需要特殊处理,链接没有问题之后就直接添加
             link = pp.preProcess(link)
             if link:
                 urls.append(link)
     return set(urls)
 def getAlexa(self, url):
     """
     :从Alexa网站上获取全球排名中文排名信息
     :param url:待获取排名信息的超链接
     """
     if ggv.pterminate:
         return None
     ranks = []
     numR = 0
     gd = GetDomain()
     domain = gd.getDomain(url)  # 提取超链接的域名
     url = cgv.alexaUrl + domain
     time.sleep(10)  # 休眠10秒
     htmlText = GetHtmlText()
     soup = htmlText.getHtml(url)  # 获取网页源码,不能直接根据网页文本进行判断,因为有的信息不存在
     if soup:
         rankrow = soup.findAll("div", {"class": "rank-row"})
         for rk in rankrow:
             rkl = rk.find("div")
             if type(rkl) == types.NoneType:
                 continue
             numR += 1
             rank = rkl.find("a").text  # 如果有排名,排名处会出现超链接
             ranks.append(rank)
         if numR < 2:
             ranks.append("-")
     else:  # 没有相关标志则表示不存在
         ranks.append("-")
         ranks.append("-")
     return ranks
示例#5
0
 def getSinglePageResult(self, url):
     '''
     :获取单个页面的搜索结果链接,百度的链接需要单独处理,因为其返回结果加密重定向了。
     :本函数返回所有搜索结果的链接,以及判断是否有下一页的链接。
     :param url: 给定的url链接
     '''
     ru = RemoveUrl()
     gh = GetHtmlText()
     signal = 1
     flag = 0
     retry = 10  #程序可能不能一次完全加载反馈所有内容,故需要等待重新加载
     while signal:
         if ggv.pterminate: break
         soup = gh.getHtml(url)
         if type(soup) == types.NoneType:
             retry -= 1
             if retry == 0: break
             continue
         navcnt = soup.find(self.navId[0], {self.navId[1]: self.navId[2]})
         if (type(navcnt) == types.NoneType):
             #print 'Not find the engine result resource div, span, h3 : NoneType retry:',retry
             logging.error(
                 'Not find the engine result resource div, span, h3 : NoneType retry: %d'
                 % retry)
             retry -= 1
             if retry == 0:
                 flag = 0
                 break
             continue
         signal = 0  #已经获取到网页的内容,直接跳出while循环
         navends = navcnt.findAll('a')  #找到所有超链接的html标志
         if not navends: break  #返回为空停止运行
         navend = navends[-1]
         if navend.text.find(self.nextId) >= 0: flag = 1
         else: flag = 0
         h3s = soup.findAll('h3')  #定位返回结果链接所属范围
         for h3 in h3s:
             if (type(h3) == types.NoneType): continue
             link = h3.find('a')  #定位结果链接位置
             if (type(link) == types.NoneType): continue
             link = link['href']  #提取链接
             if (self.engine == 'baidu'):  #百度返回结果需要特殊处理
                 try:
                     link = requests.get(link.strip())
                 except:
                     continue
                 link = link.url
             if ru.removeUrl(link):  #去除常见的非少数网站url
                 #                     print link
                 logging.info('Get Link: %s' % link)
                 self.window.scanlogUpdate(link)  #主界面同步显示
                 self.queue.put(link)
                 self.window.SetStatusText(u'获取到:%d个结果' %
                                           self.queue.qsize(),
                                           2)  #在状态栏第二栏显示当前获取到的结果数量
     return flag
    def getSinglePageResult(self,url):
        '''
        :获取单个页面的搜索结果链接,百度的链接需要单独处理,因为其返回结果加密重定向了。
        :本函数返回所有搜索结果的链接,以及判断是否有下一页的链接。
        :param url: 给定的url链接
        '''
        ru = RemoveUrl()
        gh = GetHtmlText()
        signal = 1
        flag = 0
        retry = 10                                          #程序可能不能一次完全加载反馈所有内容,故需要等待重新加载
        while signal:   
            if ggv.pterminate:break
            soup = gh.getHtml(url)
            if type(soup) == types.NoneType:
                retry -= 1
                if retry == 0:break
                continue
            navcnt = soup.find(self.navId[0],{self.navId[1]:self.navId[2]})
            if(type(navcnt) == types.NoneType):
                #print 'Not find the engine result resource div, span, h3 : NoneType retry:',retry
                logging.error('Not find the engine result resource div, span, h3 : NoneType retry: %d'%retry)
                retry -= 1
                if retry == 0:
                    flag = 0
                    break
                continue
            signal = 0                                      #已经获取到网页的内容,直接跳出while循环
            navends = navcnt.findAll('a')                   #找到所有超链接的html标志
            if not navends:break                            #返回为空停止运行
            navend = navends[-1]
            if navend.text.find(self.nextId) >= 0:flag = 1
            else:flag = 0
            h3s = soup.findAll('h3')                        #定位返回结果链接所属范围
            for h3 in h3s:
                if(type(h3) == types.NoneType):continue
                link = h3.find('a')                         #定位结果链接位置
                if(type(link) == types.NoneType):continue
                link = link['href']                         #提取链接
                if(self.engine == 'baidu'):                 #百度返回结果需要特殊处理
                    try:link = requests.get(link.strip())
                    except:continue
                    link = link.url
                if ru.removeUrl(link):                      #去除常见的非少数网站url
#                     print link
                    logging.info('Get Link: %s'%link)
                    self.window.scanlogUpdate(link)         #主界面同步显示
                    self.queue.put(link)
                    self.window.SetStatusText(u'获取到:%d个结果'%self.queue.qsize(),2) #在状态栏第二栏显示当前获取到的结果数量
        return flag
 def getBeian(self,url):
     '''
     :从360服务器读取所要网站的建站的详细信息
     :如,网站名称、网站主页、网站所有者、网站所有单位、所有单位性质、备案信息、检验时间等信息。
     :param url:需要获取相关信息的网站链接
     '''
     if ggv.pterminate:return None
     gd = GetDomain()
     domain = gd.getDomain(url)                          #提取链接中的域名,因为360根据域名获取网站建站信息
     gi = GetItems()
     base64Code = base64.b64encode(domain)               #编码为base64,因为360获取网站建站信息的超链接域名是base64编码的
     beianUrl = cgv.url360 + base64Code
     htmlText = GetHtmlText()                            #获取网页文本
     text = htmlText.getHtmlText(beianUrl)
     return gi.getItems(text, cgv.beiAnInfoItem, cgv.beiAnNoInfo)
 def getBeian(self, url):
     """
     :从360服务器读取所要网站的建站的详细信息
     :如,网站名称、网站主页、网站所有者、网站所有单位、所有单位性质、备案信息、检验时间等信息。
     :param url:需要获取相关信息的网站链接
     """
     if ggv.pterminate:
         return None
     gd = GetDomain()
     domain = gd.getDomain(url)  # 提取链接中的域名,因为360根据域名获取网站建站信息
     gi = GetItems()
     base64Code = base64.b64encode(domain)  # 编码为base64,因为360获取网站建站信息的超链接域名是base64编码的
     beianUrl = cgv.url360 + base64Code
     htmlText = GetHtmlText()  # 获取网页文本
     text = htmlText.getHtmlText(beianUrl)
     return gi.getItems(text, cgv.beiAnInfoItem, cgv.beiAnNoInfo)
    def sitld(self,url):
        '''
        :识别判断给定的url的语言是否为给定的语言
        :param url: 给定的url
        '''
        if ggv.pterminate:return None
        self.mksure = False
        ld = LangDect()
        html = GetHtmlText()
        text,htmlitems = html.getHtmlText(url,reply=True)
        if ggv.lang_use == 'mn' and text:                            #蒙古文网站复杂需要特殊处理
            msignal = [u'蒙文',u'蒙古语',u'蒙古学会',u'蒙古文']
            if len(htmlitems['generator']) > 5:             #数字5没有特殊的意义
                self.mksure = True
            elif not self.mksure:
                for ms in msignal:
                    if htmlitems['title'].find(ms) >= 0:
                        self.mksure = True
                if re.search(r'蒙古族.*(中|大|小)学'.decode('utf8'),htmlitems['title'],re.I):
                    self.mksure = True
            elif not self.mksure:
                for mf in ggv.fontfamily['mn'].split(','):
                    if htmlitems['font-family'].find(mf) >= 0:
                        self.mksure = True
            if self.mksure:
                self.window.scanlogUpdate(u'语   言:%s\r\n可信度:1.000000000\r\n链   接:%s\r\n'%(ggv.lang_use,url))   #主界面同步显示扫描结果
                return [{ggv.lang_use:'1.0'},htmlitems['charset-web']]
        if text:
            ldRst = ld.langDect(ggv.lang_use, text)         #此处只需要返回的语言及其可信度,不需要接受编码方式
            if ldRst:
#                 print '语言:%s\t可信度:%s\t链接:%s\t'%(ldRst[0].keys()[0],ldRst[0].values()[0],url)
                logging.info('语言:%s\t可信度:%s\t链接:%s\t'%(ldRst[0].keys()[0],ldRst[0].values()[0],url))
                self.window.scanlogUpdate(u'语   言:%s\r\n可信度:%s\r\n链   接:%s\r\n'\
                                          %(ldRst[0].keys()[0],ldRst[0].values()[0],url))           #主界面同步显示扫描结果
                if ggv.lang_use in ldRst[0] and ldRst[0][ggv.lang_use] > ggv.systemSetList[3]*0.01: #用户设定的阈值乘以0.01
                    return ldRst
            return None
        return None