So habe ich eine HTML-Datei mit einer Reihe von <span>
Tags mit style="font-size:...px"
, und ich möchte automatisch die <span>
mit der größten Schriftgröße finden und den Text, der zwischen den Span-Tags ist. Vorzugsweise in R oder Python, aber auch andere Methoden sind willkommen. Irgendwelche Ideen?Parsing HTML-Attribut mit R oder Python
0
A
Antwort
1
Für Python 3 können Sie html.parser
verwenden. (Für Python 2.x müssen Sie bei HTMLParser
aussehen)
Ein Beispiel wäre:
from html.parser import HTMLParser
class MyHTMLParser(HTMLParser):
def __init__(self, min_span):
HTMLParser.__init__(self)
#Keep track of our maximum entry thus far
self.max_span = min_span #set a minimum font size if you like, or just use 0
self.max_text = [] #to keep track of many entries
#This flags to the object to get data if we found a span tag
#with a new highest font-size
self.recording = 0
def handle_starttag(self, tag, attrs):
#Ignore all other tags
if tag != 'span':
return
for name, value in attrs:
if name != 'style':
continue
for css_style in value.split(";"):
sub_attrib = css_style.split(":")
if sub_attrib[0].strip() != 'font-size':
continue
this_size = int(sub_attrib[1][:-2])
if (this_size > self.max_span):
self.max_text = [] #'reset' the list for new maximum font-size
self.max_span = this_size
self.recording = 1
elif (this_size == self.max_span): #For equally large span font-size tags
self.recording = 1
def handle_endtag(self, tag):
"""
Turns off recording flag
"""
if tag == 'span' and self.recording:
self.recording = 0
def handle_data(self, data):
if self.recording:
self.max_text.append(data)
Nicht sehr gut mit HTML (wie aus meiner vorherigen Antwort), so dass Sie mehr Kontrolle benötigen Fluss für die Rand-Fälle
Verbrauch:
parser = MyHTMLParser(0)
parser.feed("""
<!DOCTYPE html>
<html>
<body>
<h1>My First Heading</h1>
<p>My first paragraph.</p>
<span style="font-size:10px;font-family:test">Not this one</span>
<span style="font-size:20px">Not this one either</span>
<span style="font-size:60px;font-family:hello">Yay!</span>
<span style="font-size:10px">Nope</span>
<span style="font-size:60px">Also this one</span>
</body>
</html>
""")
print(parser.max_text) #prints out ['Yay!', 'Also this one']
#to get individual entry
list_of_text = parser.max_text
first_maximum_text = list_of_text[0]
Edit: für in einem Verzeichnis über alle HTML-Dateien geht (in Beispiel ist das aktuelle Verzeichnis). Diese Implementierung wird den maximalen Wert für alle HTML-Dateien (wenn Sie die Analyse für jede HTML-Datei einmal wollen, initialisieren Sie die MyHTMLParser
nach jeder Iteration und verarbeiten die Ergebnisse)
import os
def main():
parser = MyHTMLParser(0)
for file in os.listdir("./"):
if file.endswith(".html"):
with open(file, 'r') as fd:
parser.feed(fd.read())
print(parser.max_text)
if __name__ == '__main__':
main()
Verwandte Themen
- 1. Parsing-Protokolldatei mit Python
- 2. Parsing Javascript mit Python
- 3. Parsing Python-Datei mit Re
- 4. Parsing as.transactions in r
- 5. String-Parsing mit Python?
- 6. Python - Parsing einer URL
- 7. Python-Parsing
- 8. durch diese Parsing mit Python
- 9. Parsing 'Zeit Zeichenfolge' mit Python?
- 10. Parsing C-Code mit Python
- 11. Parsing Int oder Float mit FParsec
- 12. Parsing Wetter XML mit Python
- 13. Parsing HTML-Tabelle mit Python - HTMLparser oder lxml
- 14. Parsing HTML-Datei in R
- 15. Python RegEx String Parsing mit inkonsistenten Daten
- 16. Yaml Verhalten - Parsing mit Python
- 17. Python Parsing HTML mit BeautifulSoup
- 18. Parsing Ereignisfolge in R-Datenrahmen
- 19. Parsing XML-Datei in R mit rentrez
- 20. Parsing japanischer Python
- 21. Python 3.5 CSV Parsing mit Sonderzeichen
- 22. Parsing und in Python
- 23. Parsing Whitespace vor oder sonst mit Parsec
- 24. Parsing oder Autoboxing oder Unboxing
- 25. Parsing verschachtelte Json Payload Python
- 26. Parsing Python subprocess.check_output()
- 27. Probleme Parsing Textdatei mit Python-CSV-Modul
- 28. Parsing config.ini in Python
- 29. Python BeautifulSoup Parsing Geschwindigkeit Verbesserung
- 30. HTML-Parsing mit Python regulären Ausdruck
Kommentare sind nicht für längere Diskussion; Diese Konversation wurde [in den Chat verschoben] (http://chat.stackoverflow.com/rooms/134080/discussion-on-answer-by-kj-phan-parsing-html-attribute-using-r-or-python) . –