ich mit diesem Kodex arbeite:Schönes Suppe 4 HTML Dokumente Verzeichnis
from bs4 import BeautifulSoup
import glob
import os
import re
def trade_spider():
os.chdir(r"C:\Users\6930p\FLO'S DATEIEN\Master FAU\Sommersemester 2016\02_Masterarbeit\04_Testumgebung\01_Probedateien für Analyseaspekt\Independent Auditors Report")
for file in glob.glob('*.html'):
with open(file, encoding="utf8") as f:
contents = f.read()
soup = BeautifulSoup(contents, "html.parser")
results = [item for item in soup.findAll("ix:nonfraction") if re.match("^[^:]:AuditFeesExpenses", item['name'])]
print(results)
#print(file, end="| ")
#print(item['name'], end="| ")
#print(item.get_text())
trade_spider()
ich mehr HTML-Dokumente in einem bestimmten Verzeichnis auf meinem Computer mit BS4 zu analysieren versuchen. Mein Ziel ist es, Tags zu finden, die mit "ix: NonFraction ...." beginnen und ein name-Attribut enthalten, das vor 'AuditFeesExpenses' mehrere Ausdrücke haben kann, wie name = "aurep: AuditFeesExpenses, name = bus: AuditFeesExpenses" usw. verwende eine RegEx). Also, wenn BS4 diesen bestimmten Tag gefunden hat, möchte ich den Text mit suppe.get_text (Value) daraus extrahieren.
Wer eine Idee, was ich verpasst habe?
UPDATE: Ein Beispiel-Tag wäre:
<td style=" width:12.50%; text-align:right; " class="ta_60">
<ix:nonFraction contextRef="ThirdPartyAgentsHypercube_FY_31_12_2012_Set1"
name="ns19:AuditFeesExpenses" unitRef="GBP" decimals="0"
format="ixt2:numdotdecimal" scale="0" xmlns:ix="http://www.xbrl.org
/2008/inlineXBRL">3,600</ix:nonFraction></td>
Normalerweise erscheint dieser Tag in einer Linie aus Gründen der Übersichtlichkeit ich ein paar neue Zeilen eingefügt!
Mein abschließender-Code sieht wie folgt aus:
from bs4 import BeautifulSoup
import glob
import os
import re
def trade_spider():
os.chdir(r"C:\Users\6930p\FLO'S DATEIEN\Master FAU\Sommersemester 2016\02_Masterarbeit\04_Testumgebung\01_Probedateien für Analyseaspekt\Independent Auditors Report")
for file in glob.glob('*.html'):
with open(file, encoding="utf8") as f:
contents = f.read()
soup = BeautifulSoup(contents, "html.parser")
for item in soup.findAll("ix:nonfraction"):
if re.match(".*AuditFeesExpenses", item['name']):
print(file, end="| ")
print(item['name'], end="| ")
print(item.get_text())
trade_spider()
und gibt mir diese Ausgabe:
Prod224_0010_00079350_20140331.html | uk-aurep: AuditBeträge | 2000
ich meine Frage aktualisiert, so dass Sie einen Beispiel-Tag sehen können, dass ich für meinen Code –
aktualisiert Antwort zu verwenden versuchen. Ich denke, das Problem rührt von 2 verschiedenen 'name'-Attributen her. Die endgültige Lösung kann 2 Schritte erfordern: alle "NonFraction" -Tags erhalten, dann filtern, um alle "AuditFeesExpenses" -Namen zu erhalten. – SNygard
Das funktioniert fast perfekt, aber Python druckt jetzt jeden NonFraction-Tag-Namen im Dokument (~ 100-200 für jedes Dokument). Gibt es eine Chance, nur nach den "AuditFeesExpenses" zu filtern und gleichzeitig Python mitzuteilen, dass der Text zwischen den Tags> 3.600