如何使用BeautifulSoup从html表中提取与标签单元格相关的值?

时间:2017-11-18 10:29:45

标签: python html parsing beautifulsoup

我有以下HTML代码:

<div class="data-table data-table_detailed">
     <div class="cell">
         <div class="cell_label"> Label1 </div>
         <div class="cell_value"> Value2 </div>
    <div class="cell">
         <div class="cell_label"> Label2 </div>
         <div class="cell_value"> Value2 </div>
    <div class="cell">
         <div class="cell_label"> Label3 </div>
         <div class="cell_value"> Value3 </div>

我想使用BeautifulSoup获取与 Label2 相关的值。

我做以下

soup = BeautifulSoup(page)
datatable = soup.find(class_="data-table data-table_detailed")
datatable.find_all(class_="cell_label") #to get the list of labels

但是如何获得标签 Label2 的单元格中的值?

3 个答案:

答案 0 :(得分:1)

您可以使用find_next_sibling

soup = BeautifulSoup(page)
datatable = soup.find(class_="data-table data-table_detailed")
cell_labels = datatable.find_all(class_="cell_label") #to get the list of labels

for cell_label in cell_labels:
    if "Label2" in cell_label.text:
        print(cell_label.find_next_sibling("div", {"class": "cell_value"}).text)

# results
 Value2 

答案 1 :(得分:0)

使用select方法(css选择器)会更容易:

value_tag = soup.select('.data-table.data-table_detailed .cell_value')[1] # Here you got your second value `tag`
text = value_tag.get_text() # Return the text inside your value element

答案 2 :(得分:0)

此代码将在文档中找到第一个<div>标记,其中包含cell_label,其中(已剥离的)内容为Label2

>>> soup.find('div', class_='cell_label', string=lambda s: s.strip() == 'Label2').find_next_sibling().string
u' Value2 '

如果您只需查找第一个<div>中包含的<div class="data-table data-table_detailed">

>>> table = soup.find(class_="data-table data-table_detailed")
>>> table.find('div', class_='cell_label', string=lambda s: s.strip() == 'Label2').find_next_sibling().string
u' Value2 '