Почему я получаю "IndexError: список индексов вне диапазона", во время цикла for, в середине красивого разбора супа? - PullRequest
4 голосов
/ 15 мая 2019

Я пытаюсь проанализировать источники изображений из 82 URL-адресов, которые я сохранил в списке под названием site_links с beautifulsoup.Я понятия не имею, почему этот цикл выдает ошибку на полпути.Есть мысли?

Ошибка:

/images/africa/egypt/abu-gorab-sun-temples/sun-temple-of-niuserre-main.jpg
/images/africa/egypt/abu-roash-pyramid-of-djedefre/abu-roash-pyramid-of-djedefre-main.jpg
/images/africa/egypt/abusir-necropolis/abusir-necropolis-main1.jpg
/images/africa/egypt/dashur-bent-pyramid/dashur-bent-pyramid-main1.jpg
/images/africa/egypt/giza-plateau-pyramid-complex/giza-plateau-pyramid-complex-main1.jpg
/images/africa/egypt/giza-plateau-sphinx/giza-plateau-sphinx-main1.jpg
/images/africa/egypt/zawyet-el-aryan-unfinished-pyramid/zawyet-el-aryan-unfinished-pyramid-main2.jpg
/images/africa/egypt/abu-simbel-temple-complex/abu-simbel-temple-complex-main1.jpg
/images/africa/egypt/aswan-elephantine-island/aswan-elephantine-island-main.jpg
/images/africa/egypt/denderra-temple-complex/denderra-temple-complex-main2.jpg
/images/africa/egypt/thebes-karnak-temple-complex/thebes-karnak-temple-complex-main5.jpg
/images/africa/egypt/thebes-luxor-temple/thebes-luxor-temple-main3.jpg
/images/africa/ethiopia/axum-obelisks/axum-obelisks-main1.jpg
/images/africa/ethiopia/lalibela-rock-hewn-churches/lalibela-rock-hewn-churches-main3.jpg
/images/asia/india/ellora-kailasa-temple/ellora-kailasa-temple-main1.jpg
/images/asia/india/warangal-warangal-fort/warangal-warangal-fort-main1.jpg
/images/asia/indonesia/west-java-gunung-padang/west-java-gunung-padang-main1.jpg
/images/asia/japan/yonaguni-yonaguni-monument/yonaguni-yonaguni-monument-main1.jpg
/images/asia/laos/xiangkhouang-plain-of-jars/xiangkhouang-plain-of-jars-main1.jpg
/images/asia/lebanon/baalbek-baalbek-temple-complex/baalbek-baalbek-temple-complex-main4.jpg
/images/asia/micronesia/pohnpei-nan-madol/pohnpei-nan-madol-main1.jpg
Traceback (most recent call last):
  File "c:/Users/J/Google Drive/pythonProjects/Megalith Map/data_scrape.py", line 41, in <module>
    img = soup.find('div', {'itemprop' : 'blogPost'}).find_all('img')[0].get('src')
IndexError: list index out of range

Мой код:

site_links = []
site_img = []
# PARSES ALL IMAGE SOURCES ON THE WEBSITE
for i in site_links:
        r = requests.get(i).text
        soup = bs4.BeautifulSoup(r, 'html5lib')
        img = soup.find('div', {'itemprop' : 'blogPost'}).find_all('img')[0].get('src')
        if '.jpg' in img:
                site_img.append(site_img)
                print(img)

1 Ответ

3 голосов
/ 15 мая 2019

Результат find_all подобен list.Если вы попытаетесь проиндексировать его, когда он пуст, это вызовет ошибку.

Это говорит о том, что он не может найти что-либо, соответствующее вашим указанным критериям на странице.Чтобы обрабатывать такие случаи, вы должны сначала проверить, нашел ли find_all что-нибудь, и только потом индексировать это:

site_links = []
site_img = []
# PARSES ALL IMAGE SOURCES ON THE WEBSITE
for i in site_links:
    r = requests.get(i).text
    soup = bs4.BeautifulSoup(r, 'html5lib')
    images = soup.find('div', {'itemprop' : 'blogPost'}).find_all('img')
    if images:
        img = images[0].get('src', '')
        if '.jpg' in img:
            site_img.append(site_img)
            print(img)

    else:
        print('No image found.')

Обратите внимание, что я также изменил вызов get, чтобы он возвращал пустую строку, если src не может быть найдено, что также предотвратит возникновение ошибки, так как в противном случае будет возвращено None, что приведет к сбою следующего теста на включение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...