Я работаю над веб-скребком, используя красивый суп. Вот моя функция:
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'
Заранее благодарю за любую помощь!
Похоже, вы неправильно поняли, почему ваш код не работает. Это не в случае 2, но в случае 1, где вы не проверяете возвращаемое значение из re.match
а затем re.match
вызов функции на None
.
Возврат Нет, если строка не соответствует шаблону; обратите внимание, что это отличается от совпадения нулевой длины.
Таким образом, ваш шаблон не соответствует тому, что есть в journalist_result[0].get_text()
; попробуйте проверить это значение, а также добавить проверку на None
.