Nano Hash - криптовалюты, майнинг, программирование

Beautiful Soup Find() возвращает AttributeError

У меня есть веб-страница, настроенная следующим образом:

//a bunch of container divs....

            <a class="food cat2 isotope-item" href="#" style="position: absolute; left: 45px; top: 0px;">
              <div class="background"></div>
              <div class="image">
                <img src="/assets/score-images/cereal2.png" alt="">
              </div>
              <div class="score">1148</div>
              <div class="name">Cereal with Banana</div>
            </a>

            <a class="food cat1 isotope-item" href="#" style="position: absolute; left: 215px; top: 0px;">
              <div class="background"></div>
              <div class="image">
                <img src="/assets/score-images/burrito-all.png" alt="">
              </div>
              <div class="score">2257</div>
              <div class="name">Beef &amp; Cheese Burrito</div>
            </a>

   //hundreds more a tags....

          </div>

I'm running this code to extra the name and score of each "a" attribute.

 page = requests.get('http://www.eatlowcarbon.org/food-scores')
  from bs4 import BeautifulSoup
  soup = BeautifulSoup(page.content, 'html.parser')

  print('HEllO')
  foodDict = {}
  aTag = soup.findAll('a')

  for tag in aTag:
          print('HELLO 2')
          name = tag.find("div", {"class": "name"}).text
          score = tag.find("div", {"class": "score"}).text
          foodDict[name] = score
          print('hello')

Оба оператора печати успешно выполнены, поэтому второй говорит мне, что я, по крайней мере, вошел в цикл for. Однако я получаю сообщение об ошибке,

File "scrapeRecipe.py", line 40, in <module>
    name = tag.find("div", {"class": "name"}).text
AttributeError: 'NoneType' object has no attribute 'text'

Из этого поста я предполагаю, что мой код не находит ни одного div с типом класса, равным «имя» или «оценка», если на то пошло. Я совершенно новичок в питоне. Есть ли у кого-нибудь совет?


Ответы:


1

Проблема не в вашем tag.find('div', ...), а скорее в вашем soup.findAll('a'). Вы извлекаете каждый тег a, даже те, у которых нет дочерних тегов, из которых вы пытаетесь извлечь данные.

Судя по тому, что вам нужно, вам также нужно добавить class к вашему findAll.

aTag = soup.findAll('a', {'class': 'food'})
26.04.2017
  • Я считаю, что это нужно найти (div, {'class': name}), но в остальном это работает 26.04.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..