Попробуйте и за исключением того, что не работает с IndexError

Я пытаюсь разобрать изображения из двух мест примерно по 82 URL-адресам, используя BeautifulSoup. Места img_page и img_gallery. В любом из этих двух мест должно быть изображение, которое я хочу проанализировать. Код работал до тех пор, пока ни в одном месте не было изображения, и я получал следующую ошибку:

***GALLERY*** /images/africa/egypt/abu-gorab-sun-temples/gallery/sun-temple-of-niuserre-2.jpg
***GALLERY*** /images/africa/egypt/abu-roash-pyramid-of-djedefre/gallery/abu-roash-pyramid-of-djedefre-10.jpg
***GALLERY*** /images/africa/egypt/abusir-necropolis/gallery/abusir-necropolis-01.jpg
***GALLERY*** /images/africa/egypt/dashur-bent-pyramid/gallery/dashur-bent-pyramid-01.jpg
***GALLERY*** /images/africa/egypt/giza-plateau-pyramid-complex/gallery/giza-plateau-pyramid-complex-01.jpg
***GALLERY*** /images/africa/egypt/giza-plateau-sphinx/gallery/giza-plateau-sphinx-01.jpg
***GALLERY*** /images/africa/egypt/giza-plateau-valley-temple/gallery/giza-plateau-valley-temple-01.jpg
***GALLERY*** /images/africa/egypt/saqqara-serapeum/gallery/saqqara-serapeum-01.jpg
***GALLERY*** /images/africa/egypt/zawyet-el-aryan-unfinished-pyramid/gallery/zawyet-el-aryan-unfinished-pyramid-01.jpg
***GALLERY*** /images/africa/egypt/abu-simbel-temple-complex/gallery/abu-simbel-temple-complex-01.jpg
***GALLERY*** /images/africa/egypt/abydos-osireion/gallery/osireion-abydos-01.jpg
**PAGE*** /images/africa/egypt/aswan-elephantine-island/aswan-elephantine-island-main.jpg
***GALLERY*** /images/africa/egypt/aswan-unfinished-obelisk/gallery/aswan-unfinished-obelisk-01.jpg
***GALLERY*** /images/africa/egypt/denderra-temple-complex/gallery/denderra-temple-complex-01.jpg
***GALLERY*** /images/africa/egypt/thebes-karnak-temple-complex/gallery/thebes-karnak-temple-complex-01.jpg
***GALLERY*** /images/africa/egypt/thebes-luxor-temple/gallery/thebes-luxor-temple-01.jpg
***GALLERY*** /images/africa/ethiopia/axum-obelisks/gallery/axum-obelisks-01.jpg
**PAGE*** /images/africa/ethiopia/lalibela-rock-hewn-churches/lalibela-rock-hewn-churches-main3.jpg
***GALLERY*** /images/asia/india/ellora-kailasa-temple/gallery/ellora-kailasa-temple-01.jpg
***GALLERY*** /images/asia/india/warangal-warangal-fort/gallery/warangal-warangal-fort-01.jpg
***GALLERY*** /images/asia/indonesia/west-java-gunung-padang/gallery/west-java-gunung-padang-01.jpg
***GALLERY*** /images/asia/israel/jerusalem-western-wall/gallery/jerusalem-western-wall01.jpg
***GALLERY*** /images/asia/japan/asuka-ishibutai-kofun/gallery/asuka-ishibutai-kofun-01.jpg
***GALLERY*** /images/asia/japan/asuka-masuda-no-iwafune/gallery/asuka-masuda-no-iwafune-01.jpg
**PAGE*** /images/asia/japan/yonaguni-yonaguni-monument/yonaguni-yonaguni-monument-main1.jpg
***GALLERY*** /images/asia/laos/xiangkhouang-plain-of-jars/gallery/xiangkhouang-plain-of-jars-01.jpg
***GALLERY*** /images/asia/lebanon/baalbek-baalbek-temple-complex/gallery/baalbek-baalbek-temple-complex-01.jpg
**PAGE*** /images/asia/micronesia/pohnpei-nan-madol/pohnpei-nan-madol-main1.jpg
***GALLERY*** /images/asia/south-korea/ganghwa-ganghwa-dolmen-site/gallery/ganghwa-ganghwa-dolmen-site-01.jpg
Traceback (most recent call last):
  File "c:/Users/JGrov/Google Drive/pythonProjects/Megalith Map/image.py", line 42, in <module>
    img_src = img_page[0].get('src', '')
IndexError: list index out of range

Затем я подумал, что могу использовать try и except, чтобы скрипт продолжал работать, и добавить 'No Images Found' к site_img, но я не могу заставить его работать. Какие-либо предложения? Спасибо!

Мой текущий код:

site_link = []
site_img = []
for i in site_links:
    r = requests.get(i).text
    soup = bs4.BeautifulSoup(r, 'html5lib')
    img_page = soup.find('div', {'itemprop' : 'blogPost'}).find_all('img')
    img_src = img_page[0].get('src', '')
    img_gallery = soup.find('a', {'class':'sigProLink fancybox-gallery', 'href':True})
    if img_gallery:
        href = img_gallery.get('href', '')
        if '.jpg' in href:
            img_link = '***GALLERY*** ' + href
            site_img.append(img_link)
            print(img_link)
    else:                               
        try:
            if '.jpg' in img_src:
                    img_link = '**PAGE*** ' + img_src       
                    site_img.append(img_link)
                    print(img_link)
        except IndexError:
                nf = 'No Images Found'
                site_img.append(nf)
                print('nf')

Потому что ошибка возникает не из строк внутри блока try-except. На самом деле ничто внутри блока try-except не может даже поднять IndexError.

DeepSpace 18.05.2019 23:09
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
5
1
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте поместить оператор обработки ошибок вокруг строки:

img_src = img_page[0].get('src', '')

Так как в соответствии с ошибкой вы получаете пустой массив img_page.

Другие вопросы по теме