2016-05-04 8 views
0

Ich habe einige Daten in einer TXT-Datei, ich versuche, einige spezifische Wörter in dieser Datei zu finden.BeautifulSoup4 gibt eine leere Liste ohne Grund zurück

import re 
from bs4 import BeautifulSoup 


with open ("myfile.txt") as f: 
    soup = BeautifulSoup(f) 

    print (soup.find_all("DLC")) 

Es gibt mindestens 5 DLC in der Datei, aber Ausgang ist eine leere Liste. Ich änderte soup = BeautifulSoup(f) als soup = BeautifulSoup(f),"html.parser", aber hat nicht funktioniert. Warum gibt es eine leere Liste zurück, da ich weiß, dass die Zeichenfolge bereits in der Datei ist. Auch funktioniert es auf der Website nicht, dass ich diese Daten gezogen habe. Wie kann ich dieses Problem beheben?

Nach dem Kommentar bearbeiten: Zum Beispiel;

<h1>Fallout 4'ün Far Harbor DLC fragmanı yayımlandı!</h1> 
<h2>Bethesda'nın yaptığı en geniş DLC geliyor</h2> 
+1

Könnten Sie einen Teil der HTML-Post, wo die 'DLC' soll in dem Dokument zu finden? Vielen Dank. – alecxe

+0

@alecxe Bearbeitet. – GLHF

+1

'find_all' findet Elemente, keine Strings. – user2357112

Antwort

2

Wenn Sie soup.find_all("DLC") nennen, BeautifulSoup würde Look für die DLC tags/Elemente auf der Seite und nicht der Text DLC innerhalb der Elemente.

Stattdessen sollten Sie das text Argument verwenden (im modernen BeautifulSoupthe argument is called string statt text):

soup.find_all(text=lambda text: text and "DLC" in text) 
+0

Es hat mein Problem behoben, ich sehe jetzt. Aber sollte ich jedes Mal ein Lambda machen, um eine einfache Saite zu finden? – GLHF

+0

@GLHF für die teilweise Übereinstimmung können Sie auch einen regulären Ausdruck anstelle einer Lambda-Funktion verwenden: 'soup.find_all (text = re.compile (" DLC "))'. Und wenn Sie eine exakte/genaue Übereinstimmung benötigen, können Sie einfach 'soup.find_all (text =" DLC ")' verwenden. – alecxe

+0

re.compile() gibt die gleiche Ausgabe wie Lambda, ich werde das verwenden. Danke für die Antwort. – GLHF