Проверка Python None, похоже, не работает с использованием BeautifulSoup

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

import BeautifulSoup
import re

soup = BeautifulSoup.BeautifulSoup(<html page of interest>)
if (soup.find_all("td", attrs= {"class": "FilterElement"}, text= re.compile("HERE IS TEXT I AM LOOKING FOR")) is None):
    print('There was no entry')
else:
    print(soup.find("td", attrs= {"class": "FilterElement"}, text= re.compile("HERE IS THE TEXT I AM LOOKING FOR")))

Очевидно, я отфильтровал реальную HTML-страницу, а также текст в регулярном выражении. Остальное точно как написано. Я получаю следующую ошибку:

Traceback (most recent call last):
  File "/Users/appa/src/workspace/web_forms/WebForms/src/root/queryForms.py", line 51, in <module>
    LoopThroughDays(form, id, trailer)
  File "/Users/appa/src/workspace/web_forms/WebForms/src/root/queryForms.py", line 33, in LoopThroughDays
    if (soup.find_all("td", attrs= {"class": "FilterElement"}, text= re.compile("HERE IS THE TEXT I AM LOOKING FOR")) is None):
TypeError: 'NoneType' object is not callable

Я понимаю, что текст иногда будет отсутствовать. Но я думал, что способ, которым я настроил оператор if, точно мог зафиксировать, когда он отсутствует, и, следовательно, NoneType.

Заранее благодарю за любую помощь!


person Mike Williamson    schedule 05.08.2014    source источник
comment
разве ваш импорт не должен быть from bs4 import BeautifulSoup? так как BeautifulSoup4 находится в bs4 модуле   -  person salmanwahed    schedule 05.08.2014
comment
@salmanwahed Да, я видел другие сайты, ссылающиеся на bs4, но когда я установил (через easy_install), базовой библиотекой был просто BeautifulSoup. Я использую его без проблем в других областях, так что я подозреваю, что это другая (более новая?) версия BeautifulSoup? Непонятно почему разница...   -  person Mike Williamson    schedule 05.08.2014


Ответы (1)


Похоже, это просто опечатка. Должно быть soup.findAll, а не soup.find_all. Пробовал запускать, работает с исправлением. Итак, полная программа должна быть:

import BeautifulSoup
import re

soup = BeautifulSoup.BeautifulSoup(<html page of interest>)
if (soup.findAll("td", attrs= {"class": "FilterElement"}, text= re.compile("HERE IS TEXT I AM LOOKING FOR")) is None):
    print('There was no entry')
else:
    print(soup.find("td", attrs= {"class": "FilterElement"}, text= re.compile("HERE IS THE TEXT I AM LOOKING FOR")))<html page of interest>
person jstein123    schedule 05.08.2014
comment
Спасибо большое! Я не смогу проверить до позднего вечера, но тогда я поставлю отметку «принято». - person Mike Williamson; 05.08.2014
comment
find_all правильно в версии 4+. findAll по-прежнему будет работать, но find_all более питонический: см. вопросы/12339323/ - person fantabolous; 04.10.2016