2017-02-11 9 views
0

Я использую Beautiful Soup для захвата текста из элемента html.Beautiful Soup .get_text() не соответствует строке Python, когда он должен

Я использую цикл и оператор if для сравнения этого текста со списком слов. Если они совпадают, я хочу вернуть подтверждение.

Однако код не подтверждает никаких совпадений, хотя утверждения печати показывают, что на самом деле имеются совпадения.

def findText(): 
    text = "" 

    url = 'www.site.com' 


    #Get url and store 
    page = requests.get(url) 
    #Get page content 
    soup = BeautifulSoup(page.content,"html.parser") 

    els = soup.select(".className") 

    lists = els[1].select(".className2") 
      for l in lists: 
       try: 
        text=l.find("li").get_text() 
       except(AttributeError): 
        text="null" 
    return text 

def isMatch(text): 
    #Open csv file 
    listFile = open('list.csv', 'rb') 
    #prep file to be read 
    newListFile =csv.reader(listFile) 


    match = "" 
    for r in newListFile: 
     if r[0]==text.lower(): 
      match = True 
     else: 
      match = False 

    return match 

    congressCSVFile.close() 

матч всегда Ложные на выходе

печати (г [0]) возвращает (скажем так) "кошка" в терминале

печати (текст) также возвращает «cat» в терминале

ответ

2

Ваш цикл является проблемой или, по крайней мере, одним из них. Как только вы найдете запись, которая соответствует вам, вы продолжаете двигаться. match будет только в конечном итоге True, если последняя запись совпадений. Чтобы это исправить, просто return, когда вы найдете матч:

for r in newListFile: 
    if r[0]==text.lower(): 
     return True 
return False 

Переменная match не требуется.

еще лучше, использовать any() функцию:

return any(r[0] == text.lower() for r in newListFile) 
+0

Спасибо, я не могу поверить, что пропустил это. Тем не менее, код все еще не работает/создает совпадение. Также перед написанием этого сообщения я пробовал распечатать подтверждение всякий раз, когда в цикле есть совпадение, но ничего не печатается. Но спасибо, что указал на эту проблему. – auto

+0

На самом деле оказалось, что было два вопроса. Это было одно, а другое - другое. Нужно было понизить() r [0]. – auto

0

В вашей попытке: text = l.find("li").get_text(strip=True)

Суп и HTML в целом добавляет значительное количество белого пространства. Если вы не проанализируете его с параметром strip, вы можете никогда не получить совпадение, если пустое пространство не включено в ваш файл списка.

+0

Спасибо, это не решило проблему. Также когда я печатаю значения, я также не вижу дополнительного пробела, они кажутся точными совпадениями. – auto

+0

Np, рад, что у вас есть ответ и надеюсь, что мой ответ несколько помогает в других проектах. –