2015-10-13 45 views
0

我有一个简单的4x2 html表,其中包含有关属性的信息。在beautifulsoup/python中查找带有特定文本的标记的索引

我试图提取值1972,它的标题是Year Built。如果我找到所有标签td,我如何提取包含文本Year Built的标签索引?

因为一旦找到该索引,我只需添加4即可找到包含值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> 

例如,我知道,如果我输入的是指数2和我的输出是标签Year Built的文字,我可以做到这一点:

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

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

回答

1

如果您的表具有静态方案,则最好使用行和列索引。另外

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 
0

你的内容存储在文件名。
请尝试:

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

转换它与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'] 
相关问题