在beautifulsoup / python

时间:2015-10-13 06:08:14

标签: python html web-scraping beautifulsoup

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

我尝试提取值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的输出?

3 个答案:

答案 0 :(得分:2)

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

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

或者,如果您只想查找包含“Year Built”的标签的索引号:

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

答案 1 :(得分:2)

将其转换为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']

答案 2 :(得分:0)

您的内容存储在文件名中 请尝试:

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