LINUX.ORG.RU

python bs4 достать значения из колонки

 ,


0

1

Есть таблица и нужно если найдено значение Num of something то нужно достать значение 2. Номер колонки, задается параметром.

<table>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Num of something</td>
<td>0</td>
<td>2</td>
</tr>
<tr>
<td>Num2 of something</td>
<td>8</td>
<td>3</td>
</tr>
</table>
data=[]
def get_value(column_number):  # номер колонки 2
    soup = bs4.BeautifulSoup(s, 'html.parser')
    tables = soup.findAll("table")
    for table in tables:
        rows = table.findAll('tr')
        for row in rows:
            data.append(row.findAll('td', text="Num of something")) # находим строку, а что дальше то?
    
    return data

★★★★★

Разные варианты есть.

z = soup.find('table').find('td', text='Num of something')
z.parent.parent.findAll('td')[2]
# или
z.parent.findNextSiblings('td')[1]

pawnhearts ★★★★★
()
Ответ на: комментарий от pawnhearts

Работает, спасибо большое!

Если добавить ещё таблицу и в ней поискать то всё очевидно падает:

s = "<table><tr><td></td><td></td><td></td></tr><tr><td>Num of something</td><td>0</td><td>2</td></tr><tr><td>Num2 of something</td><td>8</td><td>3</td></tr></table>\
  <table><tr><td></td><td></td><td></td></tr><tr><td>Numnum</td><td>0</td><td>2</td></tr><tr><td>Num3 of something</td><td>8</td><td>5</td></tr></table>"

soup = bs4.BeautifulSoup(s, 'html.parser')
tables = soup.find_all('table')
print (len(tables)) # две таблицы
for table in tables: # в каждую балицу заглянем
    z = table.find('td', text='Num3 of something') # ищем в td строку
    t = z.parent.findAll('td')[1].text # и опять фигня
print(t)

sniper21 ★★★★★
() автор топика
Ответ на: комментарий от pawnhearts

Мда сколько я ещё не знаю про Python

Спасибо вам!

sniper21 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.