Filtrere ut HTML-koder og løse enheter i python

stemmer
17

Fordi regulære uttrykk skremme meg, jeg prøver å finne en måte å fjerne alle HTML-koder og løse HTML enheter fra en streng i Python.

Publisert på 01/09/2008 klokken 05:25
kilden bruker
På andre språk...                            


8 svar

stemmer
40

Bruk LXML som er den beste xml / html bibliotek for python.

import lxml.html
t = lxml.html.fromstring("...")
t.text_content()

Og hvis du bare ønsker å rense html titt på lxml.html.clean modulen

Svarte 01/09/2008 kl. 06:07
kilden bruker

stemmer
15

Bruk BeautifulSoup ! Det er perfekt for dette, hvor du har innkommende markering av tvilsom dyd og trenger å få noe fornuftig ut av det. Bare pass i den opprinnelige teksten, trekke ut alle de streng koder, og bli med dem.

Svarte 01/09/2008 kl. 05:53
kilden bruker

stemmer
6

Mens jeg er enig med Lucas som regulære uttrykk er ikke alle som skremmende, jeg tror fremdeles at du bør gå med en spesialisert HTML-parser. Dette er fordi HTML-standarden er hårete nok (spesielt hvis du ønsker å analysere vilkårlig "HTML" sider tatt av Internett) at du trenger å skrive mye kode for å håndtere hjørne tilfeller. Det virker som python inkluderer en ut av boksen .

Du bør også sjekke ut Python-bindingene for TidyLib som kan rydde opp knust HTML, noe som gjør den suksessrate på noen HTML parsing mye høyere.

Svarte 01/09/2008 kl. 05:49
kilden bruker

stemmer
4

Hva med tolking HTML data og trekke ut data ved hjelp av parser?

Jeg ville prøve noe som forfatteren beskrevet i kapittel 8.3 i Dive Into Python bok

Svarte 01/09/2008 kl. 05:35
kilden bruker

stemmer
2

hvis du bruker django du kan også bruke http://docs.djangoproject.com/en/dev/ref/templates/builtins/#striptags ;)

Svarte 28/02/2011 kl. 15:51
kilden bruker

stemmer
1

Du trenger kanskje noe mer komplisert enn et vanlig uttrykk. Web-sider har ofte vinkelparenteser som ikke er en del av en kode, som dette:

 <div>5 < 7</div>

Stripping kodene med regex vil returnere strengen "5" og behandle

 < 7</div>

som en enkelt brikke og bånd det ut.

Jeg foreslår at du leter etter allerede skrevet kode som gjør dette for deg. Jeg gjorde et søk og fant dette: http://zesty.ca/python/scrape.html Det kan også løse HTML enheter.

Svarte 01/09/2008 kl. 05:50
kilden bruker

stemmer
0

Ser vi på hvor mye fornuft mennesker demonstrerer i andre svar her, jeg vil si at bruk av en regex trolig ikke den beste ideen for din situasjon. Gå for noe prøvd og testet, og behandle min forrige svaret som en demonstrasjon som regexes trenger ikke være det skremmende.

Svarte 02/09/2008 kl. 00:11
kilden bruker

stemmer
0

Regulære uttrykk er ikke skummelt, men å skrive dine egne regexes å strippe HTML er en sikker vei til galskap (og det vil ikke fungere, heller). Følg veien til visdom, og bruke en av de mange gode HTML-parsing biblioteker.

Lucas' eksempel er også brutt fordi 'sub' er ikke en metode for en Python streng. Du må "import re", deretter ringe re.sub (mønster, repl, streng). Men det er verken her eller der, som det riktige svaret på spørsmålet ditt ikke involverer å skrive noen regexes.

Svarte 01/09/2008 kl. 08:15
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more