python - 使用 BeautifulSoup 从表中解析数据

标签 python parsing beautifulsoup

我是 BeautifulSoup 的新手,我一直在努力解析表中的数据:

<table id="data">
    <tr>
      <td class="random.data"></td>
      <td class="name"></td>
      <td class="values"></td> <!-- 0 -->
      <td class="values"></td> <!-- 1 -->
      <td class="values"></td> <!-- 2 -->
      <td class="values"></td> <!-- 3 -->
    </tr>
    <tr>
      <td class=".random_data"></td>
      <td class="name"></td>
      <td class="values"></td> <!-- 0 -->
      <td class="values"></td> <!-- 1 -->
      <td class="values"></td> <!-- 2 -->
      <td class="values"></td> <!-- 3 -->
    </tr>
</table>

我想创建一个像这样的伪代码的字典列表:

content = []
for tr in trs:
    info = {
        'name': tr.getChildren('.name').getText(),
        'value1': tr.getChildren('.values', 0).getText() # the first value from values
        'value3': tr.getChildren('.values', 3).getText() # the fourth value from values
    }
    content.append(info)

但是我一直在尝试将其翻译成 BeautifulSoup,但惨遭失败,有什么帮助或提示吗?

最佳答案

这个想法是迭代表行,并且对于每一行,通过类名查找 name,通过 values 类名查找所有值,并获取按索引列出的期望值:

from bs4 import BeautifulSoup

data = """
<table id="data">
    <tr>
      <td class="random.data"></td>
      <td class="name">test1</td>
      <td class="values">0</td>
      <td class="values">1</td>
      <td class="values">2</td>
      <td class="values">3</td>
    </tr>
    <tr>
      <td class=".random_data"></td>
      <td class="name">test2</td>
      <td class="values">0</td> 
      <td class="values">1</td> 
      <td class="values">2</td> 
      <td class="values">3</td>
    </tr>
</table>
"""

soup = BeautifulSoup(data)

data = []
for row in soup.select("table#data tr"):
    name = row.find("td", class_="name").get_text(strip=True)
    values = row.find_all("td", class_="values")

    data.append({
        "name": name,
        "value1": values[0].get_text(strip=True),
        "value3": values[3].get_text(strip=True)
    })

print data

打印:

[
    {'value3': u'3', 'name': u'test1', 'value1': u'0'}, 
    {'value3': u'3', 'name': u'test2', 'value1': u'0'}
]

关于python - 使用 BeautifulSoup 从表中解析数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32337928/

相关文章:

python - 如何在不耗尽内存的情况下读取 tsv 文件并将它们存储为 hdf5?

python - 根据 Google Cloud Bigtable 中的唯一 ID 选择 JSON 对象

c# - 转换时拆分 DateTime 字符串

python - 如何在Instagram上刮喜欢

python - 使用 Beautiful Soup 按类名获取内容

Python Shutil.ignore_patterns 错误

python - cph.plot() : how to make it bigger?

Javascript - 替换字符串中的单词,除非该单词包含在引号中

python - 如何为具有特定属性值的xml元素选择数据,并根据key区分多个元素?

python - 使用 Beautiful Soup 解析时的“无”属性