【问题标题】:Extracting Text from "Pseudo" HTML从“伪”HTML 中提取文本
【发布时间】:2021-01-05 18:03:26
【问题描述】:

我正在尝试将制造执行系统 ​​(MES) SQL 数据库中的工单重建为 .pdf 格式,以便可以批量打印它们——而不是一次打印一个(一次一个是唯一的方法) MES 允许)。

当涉及到包含链接等的工作说明时,我被卡住了(伪html......不知道还能叫什么)。我对所需数据运行 SQL 查询并将其放入 Pandas 数据框中。以下是数据框中“文本”列(工作说明)的示例:

"DWG/TECH DATA: ALL TASK WITHIN THIS WORK ORDER ARE TO BE ACCOMPLISHED IAW:

<#Tab><UT=""LinkInvoke(Slide(OBJECT_ID=OBJECTID,@GlyphName=@InlineText,@Classification=General,@RenderDescText=True,'@Desc=| Description: PANEL, |',@Caption=DWG 123456-123 ,REF_ID=REFID))""><#Tab>

MOA DWG:
<#Tab><UT=""LinkInvoke(Slide(OBJECT_ID=OBJECT ID,@GlyphName=@InlineText,@Classification=General,@RenderDescText=True,'@Desc=| Description: FACEPLATES |',@Caption=DWG 98765 Plate,REF_ID=REFID))"">
<#Tab><UT=""LinkInvoke(Slide(OBJECT_ID=OBJID,@GlyphName=@InlineText,@Classification=General,@RenderDescText=True,'@Desc=| Description: ARTWORK |',@Caption=DWG 9999-8888 ARTWORK ,REF_ID=REFID))""><#Tab>"

我试图返回的数据应该是这样的:

DWG/技术数据:本工单中的所有任务都必须完成 国际汽车联合会:

DWG 123456-123

MOA DWG:

DWG 98765 板
DWG 9999-8888 艺术品

那里的信息往往会插入大量的复制粘贴;所以发现模式对我的正则表达式技能来说太难了。从本质上讲,我认为如果“”之间的所有内容都被删除,就会发生这种情况——除了如果它在“@Caption=”和“,”之间。

我也尝试用beautifulsoup 提取文本,但标题始终没有出来。

任何建议或帮助将不胜感激。

【问题讨论】:

  • 如果您确定问题中的样本结构公平地代表了实际数据,则可以通过字符串操作来做到这一点。
  • 表示实际数据(从 Spyder 复制和粘贴)。那么,可以同时基于两个“模式”进行拆分吗?

标签: python html beautifulsoup python-re


【解决方案1】:

使用字符串操作(不是正则表达式),可以通过以下方式实现:

work = '''DWG/TECH DATA: ALL TASK WITHIN THIS WORK ORDER ARE TO BE ACCOMPLISHED IAW:
<#Tab><UT=""LinkInvoke(Slide(OBJECT_ID=OBJECTID,@GlyphName=@InlineText,@Classification=General,@RenderDescText=True,'@Desc=| Description: PANEL, |',@Caption=DWG 123456-123 ,REF_ID=REFID))""><#Tab>
MOA DWG:
<#Tab><UT=""LinkInvoke(Slide(OBJECT_ID=OBJECT ID,@GlyphName=@InlineText,@Classification=General,@RenderDescText=True,'@Desc=| Description: FACEPLATES |',@Caption=DWG 98765 Plate,REF_ID=REFID))"">
<#Tab><UT=""LinkInvoke(Slide(OBJECT_ID=OBJID,@GlyphName=@InlineText,@Classification=General,@RenderDescText=True,'@Desc=| Description: ARTWORK |',@Caption=DWG 9999-8888 ARTWORK ,REF_ID=REFID))""><#Tab>"
'''

work_dat = work.splitlines()
for line in work_dat:
    line_lst = line.split('|')
    step_1 = [item  if "@Caption=" in item else line_lst for item in line_lst][0]
    step_2 = [item if len(step_1)==1 else step_1[2] for item in step_1]
    if len(step_2)>1:
        print(step_2[1].split('=')[1].split(',')[0].strip())
    else:
        print(step_2[0])

输出:

DWG/TECH DATA: ALL TASK WITHIN THIS WORK ORDER ARE TO BE ACCOMPLISHED IAW:
DWG 123456-123
MOA DWG:
DWG 98765 Plate
DWG 9999-8888 ARTWORK

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-26
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    相关资源
    最近更新 更多