Python извлекает номер из тега HTML, используя красивый суп

0

Я работаю над веб-скребком, используя красивый суп. Вот моя функция:

    journalist_result = soup.find_all("h4",class_="slab")
    if len(journalist_result)>0:
        journalist_share = int(re.match(r'\d+', journalist_result[0].get_text()).group())
    else:
        journalist_share=0

В основном, я хочу сделать, чтобы выделить количество журналистов, которые поделились ссылкой. В этом случае это 221 (см. Ниже, например):

ДЕЛО 1:

<h4 class="slab">221 journalists shared this link.
      <a href="/pros">Join</a> or <a href="/account/login?next=/whosharedmylink/?url=http://www.cnn.com/">sign in</a> to Muck Rack to view their names.</h3>

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

Вариант 2:

<h4 class="slab" style="margin-bottom:5px">

      This link hasn't yet been shared by any journalists.<br /><a href="/pros">Learn about using Muck Rack Pro</a> to connect with journalists.
</h4>

это потому, что в случае 2 журналиста нет. И ошибка, которую я получаю, такова:

Traceback (последний последний вызов): Файл "muckrackscraper.py", строка 65, в journalist_share = int (re.match(r '\ d+', journalist_result [0].get_text()). Group()) AttributeError: Объект 'NoneType' не имеет атрибута 'group'

Заранее благодарю за любую помощь!

Теги:
beautifulsoup

1 ответ

1

Похоже, вы неправильно поняли, почему ваш код не работает. Это не в случае 2, но в случае 1, где вы не проверяете возвращаемое значение из re.match а затем re.match вызов функции на None.

Из документации re.match:

Возврат Нет, если строка не соответствует шаблону; обратите внимание, что это отличается от совпадения нулевой длины.

Таким образом, ваш шаблон не соответствует тому, что есть в journalist_result[0].get_text(); попробуйте проверить это значение, а также добавить проверку на None.

  • 0
    Спасибо за помощь!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню