#python #html #beautifulsoup
#python #HTML #beautifulsoup
Вопрос:
Недавно я писал веб-скребок, и я обнаружил, что вкладываю циклы try / except и полагаюсь на ошибки, чтобы управлять частью моего кода, как в следующих двух сегментах:
try:
reg_title = soup.find('p', {'class': "regnumber-e"}).text
except AttributeError:
try:
reg_title = soup.find('p', {'class': "regtitle-e"}).text
except AttributeError:
reg_title = soup.find('p', {'class': "Yregnumber-e"}).text
и
if soup.find_all('p', {'class': "Notice"}):
try:
#More code
except IndexError:
#More code
continue
elif (soup.find_all('p', {'class': "ConsolidationPeriod-e"}) or
soup.find_all('p', {'class': "ConsolidationPeriod"})):
try:
text = soup.find('p', {'class': "ConsolidationPeriod-e"}).text
except AttributeError:
text = soup.find('p', {'class': "ConsolidationPeriod"}).text
elif soup.find('p', {'class': "Notice-e"}):
#More code
continue
else:
continue
Очевидно, что я вырезал разделы кода, но конкретный код здесь не имеет значения. Как правило, мои плохие датчики кодирования отключаются, и я чувствую, что должен быть лучший способ навигации по различным html-тегам при просмотре веб-страниц. Есть какие-нибудь мысли?
Ответ №1:
Не могли бы вы просто try except
всем своим кодом перехватывать несколько исключений? Нравится:
try:
# All your code
# For exemple
# if soup.find_all('p', {'class': "Notice"}):
# ...
# else:
# ...
except (AttributeError, IndexError) as e:
continue
И для части, где вы пытаетесь получить текст, простого теста, на мой взгляд, может быть достаточно
Нравится:
if soup.find('p', {'class': "ConsolidationPeriod-e"}):
text = soup.find('p', {'class': "ConsolidationPeriod-e"}).get_text()
else:
text = soup.find('p', {'class': "ConsolidationPeriod"}).text
Или:
if soup.find('p', {'class': "regnumber-e"}):
reg_title = soup.find('p', {'class': "regnumber-e"}).get_text()
elif soup.find('p', {'class': "regtitle-e"}):
reg_title = soup.find('p', {'class': "regtitle-e"}).get_text()
else:
reg_title = soup.find('p', {'class': "Yregnumber-e"}).get_text()