📄 web2korpus.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 + -