在 beautifulsoup/python 中查找具有特定文本的标签索引

z_d*_*ont 4 html python beautifulsoup web-scraping

我有一个简单的 4x2 html 表,其中包含有关属性的信息。

我正在尝试提取1972列标题下的值Year Built。如果我找到所有标签td,如何提取包含文本的标签的索引Year Built

因为一旦找到该索引,我就可以添加4以获取包含 value 的标签1972

这是 HTML:

<table>
    <tbody>
        <tr>
            <td>Building</td>
            <td>Type</td>
            <td>Year Built</td>
            <td>Sq. Ft.</td>
        </tr>
        <tr>
            <td>R01</td>
            <td>DWELL</td>
            <td>1972</td>
            <td>1166</td>
        </tr>   
    </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

例如,我知道如果我的输入是索引2并且输出是该标签的文本Year Built,我可以这样做:

from bs4 import BeautifulSoup
soup = BeautifulSoup(myhtml)
td_list = soup.find_all('td')
print td_list[2].text
Run Code Online (Sandbox Code Playgroud)

但是如何使用文本输入Year Built来获取索引的输出2

Kad*_*dir 5

如果您的表具有静态方案,那么最好使用行索引和列索引。尝试这个:

rows = soup.find("table").find("tbody").find_all("tr")
print rows[1].find_all("td")[2].get_text()
Run Code Online (Sandbox Code Playgroud)

或者,如果您只想查找包含“构建年份”的标签的索引号:

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
Run Code Online (Sandbox Code Playgroud)