长期使用,但从来没有问过我自己的问题.
我想使用Python将一个表从一个html文档解析成一个数据帧.该表不是html表,我认为它是由javascript创建的html,它只是使用一堆带有奇怪命名的类的div来创建格式和布局.
这些数据是工人及其工作时间,按工作区域排序.问题是,div不是嵌套的,因此我不能轻松地 for each 工人分配他们的工作区.我用的是美味的汤.
下面是一个简化的示例:
<html>
<body>
<div class="workarea">construction
</div>
<div class="name">Anna
</div>
<div class="Muell">w23f84md2o
</div>
<div class="time">8:23
</div>
<div class="name">Tom
</div>
<div class="Muell">w23f84md2o
</div>
<div class="time">10:20
</div>
<div class="workarea">cleaning
</div>
<div class="name">Max
</div>
<div class="Muell">w23f84md2o
</div>
<div class="time">9:30
</div>
</body>
</html>
以下是我想要的数据框:
WORKAREA | NAME | TIME |
---|---|---|
construction | Anna | 8:23 |
construction | Tom | 10:20 |
cleaning | Max | 9:30 |
注意:真正的数据有数千个div用于格式化和布局,这就是为什么我想使用适当的解析器,而不是将文档逐行读取到python中,然后自己解析它.
我没走多远:
### read html with bs4
with open("testdoc1.html") as fp:
soup=BeautifulSoup(fp,"html.parser")
wa = soup.find_all("div",class="workarea")
## here I wanted to add a for loop through wa, but wa doesnt actually contain the info
我不能遍历wa
来获取细节,因为它只包含构造和清理div,没有介于两者之间的内容.
有没有一个解决方案来解析逐行但实际上是逐div的?
我可以让find_all查找所有具有as类workarea,time or name的div吗?并保持他们的阅读顺序?
我知道已经有很多关于beautifulsoup和解析html文档的stackoverflow问题,但我真的找不到解决方案,因为原始表实际上并不只是一个表,可悲的是,html中没有保留层次 struct .
非常感谢你的帮助!如有任何提示,不胜感激!