2017-02-16 3 views
1

extrahiert Ich bin nach mehreren Iterationen fest und kann nicht herausfinden, was ich hier falsch mache, aber ich nehme an, dass es etwas mit dem Variablentyp zu tun hat, den ich betrachte.Wenn Anweisung den Variablenwert aus BeautifulSoup

Ich bin Parsen einige html von einer Website:

from bs4 import BeautifulSoup 
import urllib2 
url = 'XXX' 

page = urllib2.urlopen(url).read() 
soup = BeautifulSoup(page, "html.parser") 
soup.prettify() 

tag = soup.find("div", { "class" : "no-results--header" }) 
no_product = tag.text 

Wenn ich den Wert für no_product beurteilen finde ich:

print no_product 
#No Product 
print type(no_product) 
#<type 'unicode'> 

Wenn ich jetzt versuchen, eine if-Anweisung zu bewerten dies nicht funktioniert aus:

if no_product == 'No Product': 
    print 'Success' 
else: 
    print 'Failure' 

Diese if-Klausel gibt immer 'Fehler' zurück. Ich habe versucht, die no_product Variable als Zeichenkette mit

zu kodieren. Noch die if-Anweisung wird "Fehler" zurückgeben.

Ich verwende Python 2.7.10.

+0

Was gibt 'print repr (no_product) 'aus? – jwodder

+0

u '\ nKein Produkt \ n' – Tom

+0

wie Tom sagte, fügen Sie einfach die u. Ich bin nicht so sicher wie er, dass Sie die Zeilenumbrüche brauchen. – nycynik

Antwort

0

Wie in den Kommentaren angegeben, print repr(no_product) Ausgänge u'\nNo Product\n'. Dies bedeutet, dass der Wert no_product sowohl einen führenden als auch einen nachfolgenden Zeilenumbruch enthält.

Damit der Vergleich erfolgreich zu sein, müssen Sie entweder die Zeilenumbrüche Streifen:

if no_product.strip('\n') == 'No Product': 

oder die Zeichenfolge ändern Sie testen für:

if no_product == '\nNo Product\n': 
+0

Das funktioniert ... Vielen Dank! – Tom

0

Ich würde sagen, die richtige ' wenn‘sollte Anweisung sein:

if no_product == u'No Product': 

die u Python erzählt es eine Unicode-stri ist ng.

Ich würde vorschlagen, Sie jedoch, dass anstelle einer geraden Gleichheit, nutzen Sie die in Stichwort:

if 'No Product' in no_product: 

dies, dass no_product annehmen würde, würde nicht erwartet werden, dass die Phrase „kein Produkt“ es sei denn, die Ergebnisse enthalten war was du oben erwartet hast. Ich mag auch das in Konstrukt, weil es die Möglichkeit von versteckten Leerräumen beseitigt, die eine Nicht-Übereinstimmung verursachen.

Verwandte Themen