BeautifulSoup извлекает данные из div

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

Результаты изолированы так:

items=soup.findAll(id=re.compile("itembase"))

Для каждого элемента я хочу извлечь, например, широту и длину из этого фрагмента html:

<div id="itembase29" class="result-item -result unselected clearfix even" data-
part="fl_base" data-lat="51.9006" data-lon="-8.51008" data-number="29" 
is-local="true" data-customer="32060963" data-addrid="1" 
data-id="4b00fae498e3cc370133e8a14fd75160">
<div class="arrow">
</div>

Как я могу это сделать? Спасибо.


person eamon1234    schedule 13.11.2012    source источник


Ответы (1)


  1. Передайте свой html-объект в красивый суп.

    soup = BeautifulSoup(html)
    
  2. Найдите див.

    div = soup.div
    
  3. Получите атрибуты, которые вы ищете, из div.

    lat, lon = div.attrs['data-lat'], div.attrs['data-lon']
    
  4. Распечатать.

    >>> print lat, lon
    51.9006 -8.51008
    

Я оставил там метод .attrs для ясности, но в более общем плане вы можете получить доступ к атрибутам любого элемента, как к словарю, вам даже не нужен метод .attrs, например: div['data-lon'] . Это, очевидно, не работает со списком div, вам нужно перебрать список.

for div in divs:
    print div['data-lon'], div['data-lat']

Или понимание списка.

[(div['data-lon'], div['data-lat']) for div in divs]
person kreativitea    schedule 13.11.2012
comment
Спасибо. Теперь это работает: для элемента в элементах: суп = BeautifulSoup(str(item)) div = суп.div print div['data-lon'],div['data-lat'] - person eamon1234; 13.11.2012