2014-02-06 7 views
3

У меня есть следующий HTML-код:экстракта имя класса из тега BeautifulSoup питона

<td class="image"> 
     <a href="/target/tt0111161/" title="Target Text 1"> 
     <img alt="target img" height="74" src="img src url" title="image title" width="54"/> 
     </a> 
    </td> 
    <td class="title"> 
     <span class="wlb_wrapper" data-caller-name="search" data-size="small" data-tconst="tt0111161"> 
     </span> 
     <a href="/target/tt0111161/"> 
     Other Text 
     </a> 
     <span class="year_type"> 
     (2013) 
     </span> 

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

for td in soup.select('td.title'): 
span = td.select('span.wlb_wrapper') 
if span: 
    print span[0].get('data-tconst') # To get `tt0082971` 

Теперь я хочу, чтобы получить «Target Text 1».

Я пробовал некоторые вещи, как выше текста, такие как:

for td in soup.select('td.image'): #trying to select the <td class="image"> tag 
img = td.select('a.title') #from inside td I now try to look inside the a tag that also has the word title 
if img: 
    print img[2].get('title') #if it finds anything, then I want to return the text in class 'title' 
+1

вы сделали любую попытку извлекая сами – Blender

+0

я редактировал пост выше – kegewe

+0

другой нити здесь:.? Http: // StackOverflow .com/questions/41369344/beautifulsoup4-how-to-retrieve-a-list-of-the-class-name-of-specific-tag/41369459 # 41369459 – JinSnow

ответ

1

Если вы пытаетесь получить другой тд на основе класса (т.е. класса класса тд = «образ» и тд = «Название» вы можете использовать красивый суп как словарь, чтобы получить различные классы.

найдет все класс тд = «образ» в таблице

from bs4 import BeautifulSoup 

page = """ 
<table> 
    <tr> 
     <td class="image"> 
      <a href="/target/tt0111161/" title="Target Text 1"> 
      <img alt="target img" height="74" src="img src url" title="image title" width="54"/> 
      </a> 
      </td> 
      <td class="title"> 
      <span class="wlb_wrapper" data-caller-name="search" data-size="small" data-tconst="tt0111161"> 
      </span> 
      <a href="/target/tt0111161/"> 
      Other Text 
      </a> 
      <span class="year_type"> 
      (2013) 
      </span> 
     </td> 
    </tr> 
</table> 
""" 
soup = BeautifulSoup(page) 
tbl = soup.find('table') 
rows = tbl.findAll('tr') 
for row in rows: 
    cols = row.find_all('td') 
    for col in cols: 
     if col.has_key('class') and col['class'][0] == 'image': 
      hrefs = col.find_all('a') 
      for href in hrefs: 
       print href.get('title') 

     elif col.has_key('class') and col['class'][0] == 'title': 
      spans = col.find_all('span') 
      for span in spans: 
       if span.has_key('class') and span['class'][0] == 'wlb_wrapper': 
        print span.get('data-tconst') 
+0

Спасибо, могу ли я также добавить в инструкцию для получения значения для тега «data-tconst»? – kegewe

+0

yep, вы можете добавить оператор elif, который ищет td с заголовком, вставляя код в комментарий, не удалось, поэтому я просто обновляю свой ответ. – Jared

+0

Спасибо, теперь я просто добавил 'def getinfo:' до этого. Могу ли я написать getinfo в CSV? – kegewe

0

span.wlb_wrapper является селектор используется для выбора <span class="wlb_wrapper" data-caller-name="search" data-size="small" data-tconst="tt0111161">. См this & this для получения дополнительной информации о селекторах

изменить в коде питона span = td.select('span.wlb_wrapper') к span = td.select('span') & также span = td.select('span.year_type') и посмотреть, что он возвращается.

Если вы попробуете выше и проанализируете, что у вас есть span, вы получите то, что хотите.

+0

Я отредактировал чтобы показать, что я пытался сделать в своем коде. Я попытался изменить span.wlb_wrapper, чтобы просто пропустить, но теперь он просто возвращает значение «Нет» – kegewe

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