Ошибка find_all Beautiful Soup, когда не удается найти тег - PullRequest
0 голосов
/ 05 мая 2020

Как и сказано в заголовке, мне нужно как-то проверить, возвращает ли find_all значение.

Первая попытка. Это не работает.

cmslink =  'https://www.cms.gov/research-statistics-data-and-systemsstatistics-trends-and-reportsmcradvpartdenroldatamonthly-pdp/pdp-enrollment-scc-2020-01'
content, _ = http_request_get(url=cmslink,payload={'t':''},parse=True)
table = [a['href'] for a in content.find("ul", class_="field__items").find_all('a')]

Вторая попытка. Эта попытка не удалась, потому что на странице нет ссылки, которую она ищет

cmslink = 'https://www.cms.gov/Research-Statistics-Data-and-Systems/Statistics-Trends-and-Reports/MCRAdvPartDEnrolData/Monthly-Contract-and-Enrollment-Summary-Report-Items/Contract-Summary-2017-04'
content, _ = http_request_get(url=cmslink,payload={'t':''},parse=True)
table = [a['href'] for a in content.find("ul", class_="field__items").find_all('a')]

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

Ошибка Я получение не сильно помогло Я понял, что ссылка отсутствует, проверив страницу. Когда я запускал его на странице, на которой не было ссылки, он работал нормально.

AttributeError: 'NoneType' object has no attribute 'find_all'

1 Ответ

1 голос
/ 05 мая 2020

Как предлагает Шри:

try:
    table = [a['href'] for a in content.find("ul", class_="field__items").find_all('a')]
except AttributeError:
    print( 'No class_="field__items" found')

или:

a_list = content.find("ul", class_="field__items")
if len(a_list != 0):
    table = [a['href'] for a in a_list.find_all('a')]
...