Dunaevlad
@Dunaevlad

Как спарсить данные и на место ошибки записать значение?

with ThreadPoolExecutor(15) as executor:
        # используем map сразу для всех 15 обектов(сначала получаем 15 ссылок, затем 15 распарсенных страниц и т.д.)
        r = list(executor.map(requests.get, links))  # get unparsed pages (we will get 15 response)
        soup = list(executor.map(lambda x: BeautifulSoup(x.content, 'html.parser'), r))  # get parsed pages
        socials = list(executor.map(lambda x: x.find_all('a', class_='socialMediaLink'), soup))

    for social in socials:
        if social:
            print(social)
        else:
            print('False')

Результат:
[<a class="socialMediaLink" href="https://www.facebook.com/UNESSA.asbl" target="_blank"><i class="icon-facebook"></i></a>, <a class="socialMediaLink" href="https://twitter.com/unessabe" target="_blank"><i class="icon-twitter"></i></a>, <a class="socialMediaLink" href="https://www.linkedin.com/company/unessa-asbl/?viewAsMember=true" target="_blank"><i class="icon-linkedin"></i></a>]
[]
[<a class="socialMediaLink" href="https://www.facebook.com/eneo.asbl.namur" target="_blank"><i class="icon-facebook"></i></a>]
[]
[]
[]
[<a class="socialMediaLink" href="https://www.facebook.com/asbl.alias.vzw/" target="_blank"><i class="icon-facebook"></i></a>]
[<a class="socialMediaLink" href="https://www.facebook.com/groups/131018037914/" target="_blank"><i class="icon-facebook"></i></a>]
[<a class="socialMediaLink" href="https://www.facebook.com/urbagora?fref=ts" target="_blank"><i class="icon-facebook"></i></a>, <a class="socialMediaLink" href="https://twitter.com/urbAgora" target="_blank"><i class="icon-twitter"></i></a>]
[<a class="socialMediaLink" href="https://www.facebook.com/leuven2030/?ref=br_rs" target="_blank"><i class="icon-facebook"></i></a>, <a class="socialMediaLink" href="https://twitter.com/leuven2030" target="_blank"><i class="icon-twitter"></i></a>, <a class="socialMediaLink" href="https://www.instagram.com/leuven2030/" target="_blank"><i class="icon-linkedin"></i></a>]
[<a class="socialMediaLink" href="//www.facebook.com/netwerktegenarmoede" target="_blank"><i class="icon-facebook"></i></a>, <a class="socialMediaLink" href="//@netwerktegenarm" target="_blank"><i class="icon-twitter"></i></a>]
[]
[]
[]
[]


Теперь суть, я пытаюсь парсить ссылки на соц сети и сразу записывать в словарь, ключ => значение:
'Facebook': social[0].get("href") if social else 'No available information',

Однако не все ресурсы обладают ссылками на на соц. сети, что-то есть, что-то нет, либо вообще ни чего нет!
И если, есть ошибка, я записываю дефолтное значение 'No available information' .
Так срабатывает с
'Facebook': social[0].get("href") if social else 'No available information',
,
но не работает с
'Twitter': social[1].get("href") if social else 'No available information',  # [1] - это номер ссылки в списке на твиттер 
'Linkedin': social[2].get("href") if social else 'No available information'

как правильно или правильнее это сделать?
  • Вопрос задан
  • 71 просмотр
Пригласить эксперта
Ответы на вопрос 1
Wispik
@Wispik
social_names = {'icon-facebook': 'facebook', 'icon-twitter': 'twitter', 'icon-linkedin': 'instagram'}
for link in social:
    print(social_names[link.find('i').get('class')], link.get('href'))

Питона под рукой проверить нет, но вроде так
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
25 нояб. 2024, в 18:39
30000 руб./за проект
25 нояб. 2024, в 18:35
30000 руб./за проект
25 нояб. 2024, в 18:33
10000 руб./за проект