better code using beautiful soup for jens prasing strava website
This commit is contained in:
102
textzerlegung_parsed.py
Normal file
102
textzerlegung_parsed.py
Normal file
@@ -0,0 +1,102 @@
|
||||
import os
|
||||
from bs4 import BeautifulSoup
|
||||
|
||||
# Ordner, in dem sich die Textdateien und das Skript befinden
|
||||
ordner_pfad = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
input = "926751.html"
|
||||
|
||||
# Listen von Titeln, Start- und Endmustern
|
||||
titel = [
|
||||
"Name", # 1
|
||||
"Verifizierter Club", # 2
|
||||
"Mitglieder", # 3
|
||||
"Kategorie", # 4
|
||||
"Land", # 5
|
||||
"Club ID", # 6
|
||||
"Logo", # 7
|
||||
"Titel8", # 8
|
||||
"Titel9", # 9
|
||||
"Titel10", # 10
|
||||
]
|
||||
|
||||
selectors = [
|
||||
'meta[property="og:title"]', # 1
|
||||
'span[original-title="Verifizierter Club"]', # 2
|
||||
'div.club-members.section > h3', # 3
|
||||
'span.icon-workout.icon-lg', # 4
|
||||
# usw... TODO... die weiteren Selectoren eintragen...
|
||||
'</span>\n\r \n\r<img alt="', # 5
|
||||
'<meta content="https://www.strava.com/clubs/', # 6
|
||||
'<meta content="https://dgalywyr863hv.cloudfront.net/pictures/clubs/', # 7
|
||||
"START8", # 8
|
||||
"START9", # 9
|
||||
"START10", # 10
|
||||
]
|
||||
|
||||
properties = [
|
||||
'content', # 1
|
||||
'##inner', # 2
|
||||
'##inner', # 3
|
||||
'##inner', # 4
|
||||
# TODO... die weiteren Properties eintragen... ##inner steht für text im Tag; ansonsten Name der Eigenschaft des Tags
|
||||
]
|
||||
|
||||
#end muster werden nicht mehr benötigt, stehen hier nur aus Doku gründen...
|
||||
end_muster = [
|
||||
'" property="og:title">', # 1
|
||||
"</span>", # 2
|
||||
' Mitglieder\n</h3>', # 3
|
||||
"</span>", # 4
|
||||
'" src="data:,">', # 5
|
||||
'" property="og:url">', # 6
|
||||
'/large.jpg"', # 7
|
||||
"END8", # 8
|
||||
"END9", # 9
|
||||
"END10", # 10
|
||||
]
|
||||
|
||||
# Ausgabedatei
|
||||
ausgabe_datei = "extrahierte_werte.txt"
|
||||
|
||||
def extrahiere_werte(datei):
|
||||
extrahierte_werte = {t: [] for t in titel}
|
||||
with open(datei, 'r') as textdatei:
|
||||
index = textdatei.read()
|
||||
S = BeautifulSoup(index, 'lxml')
|
||||
for i in range(min([len(selectors), len(properties)])):
|
||||
Tag = S.select_one(selectors[i])
|
||||
property = properties[i]
|
||||
if property == "##inner":
|
||||
extrahierte_werte[titel[i]].append(Tag.text)
|
||||
else:
|
||||
extrahierte_werte[titel[i]].append(Tag[property])
|
||||
Tag = S.select_one('span[original-title="Verifizierter Club"]')
|
||||
Tag = S.select_one('span.icon-workout.icon-lg')
|
||||
property = "##inner"
|
||||
#property = "content"
|
||||
if property == "##inner":
|
||||
print(Tag.text)
|
||||
else:
|
||||
print(Tag[property])
|
||||
return extrahierte_werte
|
||||
|
||||
def main():
|
||||
print("gogo")
|
||||
with open(ausgabe_datei, 'w') as ausgabe:
|
||||
ausgabe.write("Dateiname\t" + "\t".join(titel) + "\n")
|
||||
for datei_name in os.listdir(ordner_pfad):
|
||||
if datei_name.endswith(".html"):
|
||||
print("handling {datei_name}".format(datei_name=datei_name))
|
||||
datei_pfad = os.path.join(ordner_pfad, datei_name)
|
||||
extrahierte_werte = extrahiere_werte(datei_pfad)
|
||||
print(extrahierte_werte)
|
||||
if extrahierte_werte:
|
||||
dateiname = os.path.splitext(datei_name)[0]
|
||||
ausgabe.write(dateiname)
|
||||
for t in titel:
|
||||
ausgabe.write("\t" + "\t".join(extrahierte_werte[t]))
|
||||
ausgabe.write("\n")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user