Найти индекс тега с определенным текстом в beautifulsoup / python

У меня есть простая таблица 4×2 html, которая содержит информацию о свойстве.

Я пытаюсь извлечь значение 1972 , которое находится под заголовком столбца Year Built . Если я найду все tags td , как извлечь индекс тега, который содержит текст Year Built ?

Потому что, как только я нахожу этот индекс, я могу просто добавить 4 чтобы перейти к тегу, который содержит значение 1972 .

Вот html:

 
Building Type Year Built Sq. Ft.
R01 DWELL 1972 1166

Например, я знаю, что если мой ввод – это индекс 2 а мой вывод – текст этого тега Year Built , я могу просто сделать это:

 from bs4 import BeautifulSoup soup = BeautifulSoup(myhtml) td_list = soup.find_all('td') print td_list[2].text 

Но как я могу использовать ввод текста Year Built для получения вывода индекса 2 ?

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

 rows = soup.find("table").find("tbody").find_all("tr") print rows[1].find_all("td")[2].get_text() 

Альтернативно, если вы просто хотите найти индексный номер тега, содержащий «Год постройки»:

 from bs4 import BeautifulSoup soup = BeautifulSoup(myhtml) td_list = soup.find_all('td') i = 0 for elem in td_list: if elem.text == 'Year Built': ind = i i += 1 print td_list[ind].text 

Преобразуйте его в dict и получите значение:

 from bs4 import BeautifulSoup table_data = [[cell.text for cell in row("td")] for row in BeautifulSoup(myhtml)("tr")] dict = dict(zip(table_data[0], table_data[1])) print dict['Year Built'] 

Ваш контент хранится в имени файла.
Пожалуйста попробуйте:

 In [3]: soup = BeautifulSoup(open("filename")) In [4]: print soup.find_all('td')[2].string Year Built