2016-06-16 4 views
-1

Я пытаюсь отказаться от <span class= ''>. Код выглядит следующим образом на страницах я слом:BeautifulSoup Scrapping Span Class HTML

< span class = "catnum"> Disc Number </span> 
    "1" 
    <br> 
    < span class = "catnum"> Track Number </span> 
    "1" 
    < br> 
    < span class = "catnum" > Duration < /span> 
    "5:28" 
    <br> 

Что мне нужно, чтобы получить эти цифры являются после </span> тега. Я также хотел бы упомянуть, что я пишу большую часть кода, который обрывает 1200 сайтов, и для этого потребуется перебрать более 1200 сайтов, где числа в кавычках будут меняться со страницы на страницу.

Я попробовал этот код в качестве теста на одной странице:

from bs4 import BeautifulSoup 

    soup = BeautifulSoup (open("Smith.html"), "html.parser") 

    for tag in soup.findAll('span'): 
     if tag.has_key('class'): 
      if tag['class'] == 'catnum': 
       print tag.string 

Я знаю, что будет печатать все тег «класса пяди», а не только три я хочу, но я думал, что еще проверить его чтобы увидеть, если он работал, и я получил эту ошибку:

/Library/Python/2.7/site-packages/bs4/element.py:1527: UserWarning: has_key is deprecated. Use has_attr("class") instead. key))

+0

'[span.next_sibling.strip() для диапазона в soup.select ("span.catnum")]' –

ответ

0

как сказано в сообщении об ошибке, вы должны использовать tag.has_attr("class") вместо устаревшего tag.has_key("class") метода.

Надеюсь, это поможет.

Simone

+0

Это сделал получить поездку ошибки, но теперь ничего это печать, поэтому я не знаю, правильно ли она взяла ее. Другая проблема, с которой я столкнулась, - это цифры в цитатах, а не в тексте. –

+0

Я знаю, но вы спросили причину ошибки, и я ответил на этот вопрос. Я не понимаю причину большого пальца. –

+0

В любом случае проблема заключается в том, что'tag ['class'] 'возвращает имя класса в форме' [u'catnum '] ', поэтому вам нужно проверить эту конкретную строку или проверить, содержит ли она строку, находясь в поиске. для тега в soup.findAll ('поверочного'): \t если tag.has_attr ('класс'): если 'catnum' в теге [ 'класс']: \t \t печати tag.string Здесь рабочий пример. –

0

Вы можете ограничить область поиска по атрибуту {'class': 'catnum'} и текстом внутри text=re.compile('Disc Number'). Затем с помощью .next_sibling найти текст:

from bs4 import BeautifulSoup 
import re 
s = ''' 
    <span class = "catnum"> Disc Number </span> 
    "1" 
    <br/> 
    <span class = "catnum"> Track Number </span> 
    "1" 
    <br/> 
    <span class = "catnum"> Duration </span> 
    "5:28" 
    <br/>''' 

soup = BeautifulSoup(s, 'html.parser') 
span = soup.find('span', {'class': 'catnum'}, text=re.compile(r'Disc Number')) 
print span.next_sibling 
Смежные вопросы