Seite 1 von 1

String zwischen Zeichen String

Verfasst: Freitag 23. August 2019, 23:31
von LRK
Hi,
Ich würde gerne aus dem folgendem Text die URL raus filtern und den Namen. Problem bei der Sache ist ich habe mehrere solcher Texte, bei denen sich die Zahl (100) ändert die URL und der Name ändern sich logischerweise auch. Habe es mit replace versucht und pre und Post die Zahl heraus zu filtern um diese dann aus dem String entfernen zu können. Jemand eine Idee? :(
text = '<li class="hallo-100"><a href="https://test.xy">testname</a>'

data = text.replace(' ','').replace(' ','').replace('<','').replace('>','').replace('"','',2).replace('=','').replace('-','')
pre = 'liclasscatitemcatitem'
post = 'ahref'
data = data[len(pre):-len(post)]

Re: String zwischen Zeichen String

Verfasst: Freitag 23. August 2019, 23:41
von sparrow
Ist das tatsächlich das, was du als Vorlage hast? Oder parst du HTML-Code?
In letzterem Fall: Nutze einen HTML-Parser wie beautifulsoup.

Nee, ich korrigiere: Nimm auf jeden Fall beautifulsoup.

Re: String zwischen Zeichen String

Verfasst: Samstag 24. August 2019, 08:47
von LRK
Hi, danke. beautifulsoup ich Google Mal
Wie kann ich importieren?

Re: String zwischen Zeichen String

Verfasst: Samstag 24. August 2019, 09:35
von sparrow
Du brauchst nicht googeln.
Es sollte reichen, wenn du dem Link aus meinem Beitrag folgst.

Re: String zwischen Zeichen String

Verfasst: Samstag 24. August 2019, 13:22
von __blackjack__
Falls `text` wirklich der Ausgangspunkt ist:

Code: Alles auswählen

In [212]: text = '<li class="hallo-100"><a href="https://test.xy">testname</a>' 

In [213]: soup = bs4.BeautifulSoup(text, "html.parser")                         

In [214]: soup.a                                                                
Out[214]: <a href="https://test.xy">testname</a>

In [215]: soup.a["href"]                                                        
Out[215]: 'https://test.xy'
Aber wahrscheinlich kommt das ja auch einem kompletten HTML-Dokument, da sollte man also auch bis zu dem was in `text` repräsentiert ist, mit `BeautifulSoup` kommen.

Re: String zwischen Zeichen String

Verfasst: Samstag 24. August 2019, 13:29
von LRK
Oh den link habe ich wohl übersehen, danke. Ja es ist nur der Ausschnitt in Text um Dehn es geht. Ich lasse mir diesen Ausschnitt aus einer Webseite geben.

Re: String zwischen Zeichen String

Verfasst: Samstag 24. August 2019, 13:40
von __blackjack__
@LRK: Was heisst Du lässt Dir den Ausschnitt aus einer Webseite geben? Wenn Du den da mit Zeichenkettenoperationen heraus holst, ohne zu berücksichtigen/zu nutzen, dass es sich bei HTML um ein strukturiertes Dokument handelt, dann solltest Du mit dem HTML-Parser nicht erst bei dem gezeigten Ausschnitt ansetzen.

Re: String zwischen Zeichen String

Verfasst: Samstag 24. August 2019, 16:14
von LRK
Warum darf ich nicht erst da ansetzen?
Ich lade mir die seite Und durchsuche sie nach einem string und lasse mir die Zeilen ausgeben.
req = urllib2.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3')
response = urllib2.urlopen(req)
link = response.read()
response.close()

with open(test_file2,"w") as testf:
testf.write("")

for line in link:
if "cat-item cat-item" in line:
from bs4 import BeautifulSoup
soup = BeautifulSoup(line, "html.parser")
link = soup.a["href"]

with open(test_file2,"a") as testf:
testf.write('{}\n'.format(link))
/quote]

Re: String zwischen Zeichen String

Verfasst: Samstag 24. August 2019, 16:15
von LRK
Sry ich bekomme das mit der Formatierung nicht richtig hin, wenn ich das Script hier poste.

Re: String zwischen Zeichen String

Verfasst: Samstag 24. August 2019, 16:21
von Sirius3
@LRK: HTML-Dateien sind keine Text-Dateien, sondern deutlich komplexer. Mit Beautiful-Soup kannst Du bequem die Stelle im HTML suchen, die Du brauchst, da mußt Du ja nicht zwei verschiedene Methoden einsetzen.

Zum Code:
urlopen solltest Du auch mit with benutzen.
Einen leeren String zu schreiben, macht keinen Sinn. Du solltest die Datei einmal öffnen und nicht bei jeder Zeile neu.
Importe gehören alle an den Anfang der Datei.

Für Code im Forum, benutze [ code ] -Tags, der </>-Knopf im vollständigen Editor.

Re: String zwischen Zeichen String

Verfasst: Samstag 24. August 2019, 17:55
von LRK
Danke Sirius3, werde gleich Mal versuchen das schnell um zu setzen.

Urlopen mit with bekomme ich folgenden Fehler.

with urllib2.urlopen(req) as response:
AttributeError: addinfourl instance has no attribute '__exit__'

Re: String zwischen Zeichen String

Verfasst: Samstag 24. August 2019, 18:29
von Sirius3
Ach, Du benutzt noch Python2. Das ist veraltet und Du solltest auf Python3 umsteigen.

Re: String zwischen Zeichen String

Verfasst: Samstag 24. August 2019, 19:54
von LRK
Scheint so. XBMC Kodi
Und ich mache alles am Smartphone. S9