Mam ciąg:

<font face="ARIAL,HELVETICA" size="-2">  
JUL 28         </font>

(Wyjścia ponad dwie linie, więc musi być tam.

Chcę wyodrębnić ciąg, który znajduje się między tagami <font></font>. W takim przypadku jest 28 lipca, ale może być kolejną datą lub inną liczbą.

1) Najlepszy sposób na wyodrębnienie wartości między znacznikami czcionek? Myślałem, że mogłem wyodrębnić wszystko między "> i </.

Edytuj: usunięto drugie pytanie.

6
Flux Capacitor 27 październik 2011, 07:46

6 odpowiedzi

Najlepsza odpowiedź

Chociaż może być możliwe rozliczenie arbitralnego HTML z wyrażeniami regularnymi, to często pułapka śmierci. Istnieją świetne narzędzia do analizowania HTML, w tym BeautifulSoup, co jest Python Lib, który może Rękojeść złamany , jak również dobry HTML dość dobrze.

>>> from BeautifulSoup import BeautifulSoup as BSHTML
>>> BS = BSHTML("""
... <font face="ARIAL,HELVETICA" size="-2">  
... JUL 28         </font>"""
... )
>>> BS.font.contents[0].strip()
u'JUL 28'

Następnie wystarczy analizować datę:

>>> datetime.strptime(BS.font.contents[0].strip(), '%b %d')
>>> datetime.datetime(1900, 7, 28, 0, 0)
datetime.datetime(1900, 7, 28, 0, 0)
10
kojiro 27 październik 2011, 04:06

Tutaj masz kilka opcji. Można pójść na rozszerzoną parser XML, jak LXML, choć wydaje się, że chcesz rozwiązać specyficzne dla domeny. Pójdę z multiline Regex:

import re
rex = re.compile(r'<font.*?>(.*?)</font>',re.S|re.M)
...
data = """<font face="ARIAL,HELVETICA" size="-2">  
JUL 28         </font>"""

match = rex.match(data)
if match:
    text = match.groups()[0].strip()

Teraz, gdy masz text, możesz łatwo włączyć go w datę:

from datetime import datetime
date = datetime.strptime(text, "%b %d")
6
fahhem 27 październik 2011, 04:00

Lub można po prostu użyć Piękna zupa:

Piękna zupa to parser Pythona HTML / XML przeznaczony do szybkich projektów turnowych, takich jak skrobanie z ekranu

1
Óscar López 27 październik 2011, 04:03

Python ma bibliotekę o nazwie HTMLParser. Zobacz także następujące pytanie w taki sposób, dzięki czemu jest bardzo podobny do tego, czego szukasz:

Jak mogę korzystać z biblioteki Pythona HTMLPARSER, aby wyodrębnić dane z określonej tagu DIV?

1
yasouser 5 luty 2020, 21:36

Jest opcja grep?

grep "<[^>]*>(.*)<\/[^>]*>" file

(. *) Powinien pasować do Twojej zawartości.

0
AnthonyHurst 27 październik 2011, 03:51

Użyj Selektorów XPath SHOPOPY jako udokumentowane w http://doc.scrapy.org/ en / 0.10.3 / tematy / selekcjonerów.html

Alternatywnie możesz korzystać z parsera HTML, takiego jak pięknaSoup, zwłaszcza jeśli chcesz działać na dokumencie w sposób zorientowany obiektem.

http://pipi.python.org/pypi/beautifulSoup/3.2.0.

0
Victor Olex 27 październik 2011, 04:03