为了账号安全,请及时绑定邮箱和手机立即绑定

美丽的汤解析多个标签

美丽的汤解析多个标签

潇潇雨雨 2022-05-24 10:41:38
我正在为我的学校评分系统处理数据,并试图弄清楚如何按类别提取数据。这是原始 HTML:https ://pastebin.com/icbaemd7现在,我编写了一个 Python 脚本:html = driver.page_sourcesoup = BeautifulSoup(html, 'html.parser')chemData = ((soup.find_all('td')))content = []print chemDataprint ""for i in chemData:    content.append(i.getText().split('</td')[0])for k in content:    print (k)返回此结果:Safety Contract Signed1/18/13/2019Student Profile Sheet Turned In1/18/13/2019Polyatomic Ion Quiz10/108/19/2019HW Quiz Ch. 3 Target 63/38/27/2019HW Quiz (Ch. 3 Targets 1-6)12/168/28/2019Chapters 1 & 2 Formative Quiz15/178/21/2019Chapter 3 Formative Quiz23.5/259/5/2019Lab Report: Antifreeze Lab10/108/21/2019Types of Reactions Lab Report11/128/23/2019Hydrate Lab Report10/108/29/2019Lab Assessment - Types of Reactions Lab10/158/26/2019Lab Assessment: Hydrate Lab10/109/3/2019但是,我想将这些分类到 HTML 中存在的类别中。h3如果我使用而不是运行相同的脚本td,我会得到它们:HomeworkFormative QuizzesLab ReportsLab Assessments所以我的问题是:如何让它自动将实际作业分类到相应的类别中?任何帮助将不胜感激。谢谢!
查看完整描述

2 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

尝试以下类似的方法,您可以在其中测试 h3 并制作字典键,否则从当前 dict[key] 下的行中添加值


from bs4 import BeautifulSoup as bs


html = '''yourHTML'''

soup = bs(html, 'lxml')

results = {}


for i in soup.select('h3, tr'):

    if i.name == 'h3':

        header = i.text

        results[header] = []

    else:

        results[header].append(' '.join([n.text for n in i.select('td')]))

print(results)


查看完整回答
反对 回复 2022-05-24
?
BIG阳

TA贡献1859条经验 获得超6个赞

您的 html 无法正确呈现。然而,作为快速解决方案,查找包含 h3 标记和每个类别的表的父容器,并首先抓取父容器。例如,让我们假设 h3 标签和表格在一个 div 下。然后先刮掉div 标签,即 d = soup.findall('div')。然后通过 d 进一步循环以提取 h3 标签,然后是 tr/td。前任。d[0].findall('h3') d[0].findall('td') 等等..



查看完整回答
反对 回复 2022-05-24
  • 2 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信