2016-05-20 1 views
-1

Was ich tun möchte ist, ändern Sie jedes Tag (ob seine <a href=> oder <title> oder </title> oder </div> ... etc) zu einem Symbol.Ändern Sie alle HTML-Tags zu Symbol mit Python

Ich habe versucht, schöne Suppe verwenden, aber es findet nur Tags, die ich definieren ...

ich einige Code in der HTMLparser.py gefunden

tagfind = re.compile('([a-zA-Z][^\t\n\r\f />\x00]*)(?:\s|/(?!>))*') 

Ich glaube, das ist das, was ich suche Ich weiß einfach nicht, wie man es richtig benutzt.

Auch dachte ich, ich das verwenden könnte:

handle_starttag(self, tag, attrs): 

Aber ich will nicht den Tag definieren, ich will nur das Skript jeden einzelnen Tag zu finden und es zu etwas ändern ...

Ist das möglich?

Vielen Dank für Ihre Hilfe !!

+0

Das ist eine Menge von Tags. Was ist dein ultimatives Ziel? –

+0

Um jedes Tag aus dem HTML zu entfernen und durch ein Symbol zu ersetzen –

+0

Ich meine, warum willst du das tun? –

Antwort

0

BeautifulSoup ist keine gute Idee hier - das ist für analysiert HTML, nicht zu bearbeiten.

Auch dass Regex scheint nicht wie ein sehr gut (nur paßt den Inhalt innerhalb einen Tag eher als den ganzen Tag selbst), so fand ich eine anderen, die besser auf Ihre Zwecke geeignet wären:

</?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[\^'">\s]+))?)+\s*|\s*)/?> 

Dieses Tag wird so etwas wie die folgenden entsprechen:

<h1> 
</h1> 
<img src="foo.com/image.png"> 

wir dies für den Austausch aller Tags mithilfe von re.sub verwenden können. Dies findet alle Übereinstimmungen für eine bestimmte Regex und ersetzt sie durch etwas anderes. Hier ist, wie Sie es für verwenden würde, was Sie tun möchten:

import re 

html_regex = r"""</?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[\^'">\s]+))?)+\s*|\s*)/?>""" 
html = "<h1>Foo</h1>" 

print(re.sub(html_regex, "@", html)) 

Dies würde drucken:

@[email protected] 
+0

Das sieht herrlich aus !! Vielen Dank!!! –

+1

@HarpAngel Kein Problem! Bitte denken Sie daran, Antworten zu akzeptieren, die Ihnen geholfen haben. –

+0

nur ein Ende fehlt) auf der Druckfunktion, aber es funktioniert !! –

1

Eine sehr viel zuverlässiger Weg, um rekursiv jeden Tag zu besuchen, Ich habe gerade den Namen in das Beispiel unten, aber Sie können, was Sie tun möchten, wenn Sie den Tag haben:

from bs4 import BeautifulSoup, element 

def visit(s): 
    if isinstance(s, element.Tag): 
     has_children = s.find_all() 
     if has_children: 
      s.name = "foobar" 
      for child in s: 
       visit(child) 
     else: 
      s.name = "foobar" 

es zu benutzen:

soup = BeautifulSoup(...) 
visit(soup) 

Dann werden alle Änderungen in der Suppe wiedergegeben.

+0

Ich habe das Tag aber nicht ... –

+0

@HarpAngell, über welches Etikett redest du? Du übergibst einfach die Suppe an die Funktion und tust, was immer du willst, wenn du ein Tag findest, führe den Code auf einem HTML aus und druckst dann Suppe nach –

+0

Du sagtest "sobald du das Tag hast" aber jetzt merke ich, dass du einmal das Skript hast das Tag –

Verwandte Themen