⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 web2korpus.py

📁 documents classification and words statiscs TF/IDF etc
💻 PY
字号:
#!/usr/bin/python
# -*- coding: iso-8859-1 -*-
#
# Hilfsklassen und -funktionen f黵 Korpus.py


import htmllib, formatter, urllib, urlparse
import StringIO


# Klasse zum Entfernen von HTML und Formatieren der Textdatei
class HTMLStripper(htmllib.HTMLParser):
    def __init__(self):
        self.bodytext = StringIO.StringIO()
        writer = formatter.DumbWriter(self.bodytext)
        htmllib.HTMLParser.__init__(self,
            formatter.AbstractFormatter(writer))

    # dies 黚erschreibt die Standardfunktion in htmllib.py,
    # die f黵 jeden Link eine Art Fussnote im Text anlegt: [x]
    def anchor_end(self):
        if self.anchor:
            self.handle_data('')
            self.anchor = None

    # dies 黚erschreibt die Standardfunktion in htmllib.py,
    # die f黵 jedes Image den ALT-Text wiedergibt
    def handle_image(self, src, alt, *args):
        self.handle_data('')

    def gettext(self):
        return self.bodytext.getvalue()


#################

class Web2Korpus:
    def __init__(self, master=None, url='', anzahl=1, basis='', codepage='latin-1'):
        self.master = master
        self.url = url
        self.anzahl = anzahl
        self.basis = basis
        self.codepage = codepage
        
        if self.url[:7] != 'http://':
            self.url = 'http://' + self.url

        self.host = urlparse.urljoin(self.url, '/')
        self.subdir = urlparse.urljoin(self.url, ' ').strip()
        if basis == 'subdir':
            self.basis = self.subdir
        else:
            self.basis = self.host
        
        # Format: Dictionary mit key = url und value = [seite, [links]]
        self.data = {}
        self.links = []
        
        if self.anzahl == 1:
            self.getWebPage()
        else:
            self.getSomeWebPages()

           
    def checkLink(self, url):
        gutesuffixe = ['.html', '.htm', '.php', '.shtml', '.shtm', '.cgi', '.asp', '.cfm', '.txt']
        url_ok = 1
        if url in self.links:
            url_ok = 0
        elif not url.startswith(self.basis):
            url_ok = 0
        elif url[0:4] != 'http':
            url_ok = 0
        elif url[url.rfind('.'):] not in gutesuffixe:
            url_ok = 0
            if url[-1:] == '/':
                url_ok = 1              
        return url_ok

            
    def getWebPage(self):
        try:
            verbindung = urllib.urlopen(self.url)
            # info = verbindung.info()
            seite = verbindung.read()
            
####        # Ausprobieren, ob man das besser hier schon in Unicode umwandeln kann
            # seite = unicode(seite, self.codepage)
            
            st = HTMLStripper()
            st.feed(seite)
            st.close()
            self.data[self.url] = st.gettext()
            
            # Links 黚erpr黤en und in Liste
            for x in st.anchorlist:
                if x.find('/') == -1:
                    x = urlparse.urljoin(self.url, x)
                if x.find('/') == 0:
                    x = urlparse.urljoin(self.host, x)
                
                url_ok = self.checkLink(x)   
                if url_ok == 1:
                    self.links.append(x)
        except:
            self.data[self.url] = 'Fehler'
        

      
   
    def getSomeWebPages(self):
        self.getWebPage()
        i = 1
        while len(self.links) > 0:
            if i >= self.anzahl:
                break
            else:
                self.url = self.links[0]
                self.links.pop(0)
                if self.data.has_key(self.url) == 0:
                    self.getWebPage()
                    i = i+1
                    
                    # Fortschritt in Statusbar anzeigen
                    self.master.status.progress.updateProgress(newValue=i, newMax=self.anzahl)
                    
        # Progressbar zur點ksetzen                
        self.master.status.progress.updateProgress(0)

       
    def getData(self):
        return self.data


    
if __name__ == '__main__':
    url = 'www.fu-berlin.de'
    k = Web2Korpus(url, anzahl=3, basis='server')
    x = k.getData()
    for i in x.keys():
        print i
        print x[i]

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -