Używam BeautifulSoup i parsuję niektóre HTML.
Otrzymuję określone dane z każdego kodu HTML (używając pętli for) i dodaję te dane do określonej listy.
Problem polega na tym, że niektóre HTML mają inny format (i nie mają w nich danych, których potrzebuję) .
Więc próbowałem użyć obsługi wyjątków i dodać wartość null
do listy (powinienem to zrobić, ponieważ kolejność danych jest ważna).
Na przykład mam kod taki jak:
soup = BeautifulSoup(links)
dlist = soup.findAll('dd', 'title')
# I'm trying to find content between <dd class='title'> and </dd>
gotdata = dlist[1]
# and what i want is the 2nd content of those
newlist.append(gotdata)
# and I add that to a newlist
a niektóre linki nie mają żadnych <dd class='title'>
, więc null
zamiast tego chcę dodać ciąg do listy.
Pojawia się błąd:
list index out of range.
Próbowałem dodać kilka linii w ten sposób:
if not dlist[1]:
newlist.append('null')
continue
Ale to nie działa. Nadal pokazuje błąd:
list index out of range.
Co mam z tym zrobić? Czy powinienem używać obsługi wyjątków? czy jest jakiś łatwiejszy sposób?
Jakieś sugestie? Każda pomoc byłaby naprawdę świetna!
źródło
None
jest wyraźnie czystszy, OP chce'null'
w tym przypadku.Masz dwie możliwości; obsłuż wyjątek lub sprawdź długość:
lub
Użyj pierwszego, jeśli często nie ma drugiego elementu, drugiego, jeśli czasami nie ma drugiego elementu.
źródło
Wystarczy trójskładnik. zmiana:
do
to jest krótszy sposób wyrażania
źródło
Biorąc odniesienie do ThiefMaster ♦ czasami otrzymujemy błąd o wartości podanej jako '\ n' lub null i wykonujemy dla tego, co jest wymagane do obsługi ValueError:
Obsługa wyjątku jest drogą do zrobienia
źródło
źródło
Dla wszystkich zainteresowanych krótszą drogą:
Ale aby uzyskać najlepszą wydajność, sugeruję użycie
False
zamiast'null'
, wtedy wystarczy jeden test liniowy:źródło