2013-11-26 5 views
0

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

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 (см, например):

case1:

<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 (г '\ d +', journalist_result [0 ] .get_text()). group()) AttributeError: объект «NoneType» не имеет атрибута «группа»

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

ответ

1

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

Из re.match documentation:

Return None if the string does not match the pattern; note that this is different from a zero-length match.

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

+0

Благодарим за помощь! – Telenoobies

Смежные вопросы