【问题标题】:extracting specific part from text page html python从文本页面html python中提取特定部分
【发布时间】:2018-10-22 19:36:43
【问题描述】:

我有关注

html_source = """{"linkparam":"CDAQ46598omxw=","linkmetadata":{"weblinkmetadata":{"url":"/service_ajax","sendPost":true}},"formfield":{"action":"CAUaMVVnd2t2Z1htRGl3OXAtS0FVaUY0QWFBQkNRLjhtZmduZEgzWXI4OG1maDFJMjRiV0gwATgAShUxMDIwMTQzMTg0NzMxMTE4NzMxNzBaGFVDQjBkMEpMbjFXY0dZY3d3Wjg3ZDJMQXAA","clientActions":[{"formaction":{"voteCount":{"accessibility":{"accessibilityData":{"label":"11 status"}},"simpleText":"11"},"formstatus":"FORM"}}]}}
    #below  part i want to  extract from page including curly braces
    {"linkparam":"CDAQ46597omxw=","linkmetadata":{"weblinkmetadata":{"url":"/service_ajax","sendPost":true}},"formfield":{"action":"CAUaMVVnd2t2Z1htRGl3OXAtS0FVaUY0QWFBQkNRLjhtZmduZEgzWXI4OG1maDFJMjRiV0gwATgAShUxMDIwMTQzMTg0NzMxMTE4NzMxNzBaGFVDQjBkMEpMbjFXY0dZY3d3Wjg3ZDJMQXAA","clientActions":[{"formaction":{"voteCount":{"accessibility":{"accessibilityData":{"label":"11 status"}},"simpleText":"11"},"formstatus":"FORM"}}]}}
    #above  part i want to  extract from page including curly braces
    {"linkparam":"CDAQ46448omxw=","linkmetadata":{"weblinkmetadata":{"url":"/service_ajax","sendPost":true}},"formfield":{"action":"BQkNRLjhtZmduZEgzWXI4OG1maDFJMjRiV0gwATgAShUxMDIwMTQzMTg0NzMxMTE4NzMxNzBaGFVDQjBkMEpMbjFXY0dZY3d3Wjg3ZDJMQXAA","clientActions":[{"formaction":{"voteCount":{"accessibility":{"accessibilityData":{"label":"11 status"}},"simpleText":"11"},"formstatus":"FORM"}}]}}"""a


m = re.search(r"\{(.*?)\}", html_source)

我想从页面字符串中提取这部分

{"linkparam":"CDAQ46597omxw=","linkmetadata":{"weblinkmetadata":{"url":"/service_ajax","sendPost":true}},"formfield":{"action":"CAUaMVVnd2t2Z1htRGl3OXAtS0FVaUY0QWFBQkNRLjhtZmduZEgzWXI4OG1maDFJMjRiV0gwATgAShUxMDIwMTQzMTg0NzMxMTE4NzMxNzBaGFVDQjBkMEpMbjFXY0dZY3d3Wjg3ZDJMQXAA","clientActions":[{"formaction":{"voteCount":{"accessibility":{"accessibilityData":{"label":"11 status"}},"simpleText":"11"},"formstatus":"FORM"}}]}}

【问题讨论】:

  • 你到底想做什么?
  • 再次阅读我提到的代码我想从页面 html_source 中提取特定部分
  • 为我工作。确保在第一行末尾添加三个双引号(即 """),否则会出现 EOF 错误...您也可以使用 re.findall(...)
  • 我想从给定的字符串中提取特定部分,我还提到了我想要提取的部分,我的字符串有三个部分,每个部分用花括号分隔,我想提取第二个部分你可以看到我在字符串中提到了我想要提取的部分对不起我的英语不好:(帮助我
  • 那么,您的解决方案的哪一部分不起作用?

标签: python regex python-3.x


【解决方案1】:

您的数据看起来像是由 cmets 分隔的 json 项目列表(以“#”开头的行)。

因此,您可以将注释替换为“,”,并用“[”和“]”包装您的数据以创建一个 json 列表。

import re

html_source = re.sub(r'#.*?\n', ',', html_source, flags=re.DOTALL)
html_source = '['+html_source+']'

然后,您可以使用json 库来解析这个项目列表并提取第二个:

import json
import pprint

data = json.loads(html_source)
pprint.pprint(data[2])

你得到:

{'formfield': {'action': 'BQkNRLjhtZmduZEgzWXI4OG1maDFJMjRiV0gwATgAShUxMDIwMTQzMTg0NzMxMTE4NzMxNzBaGFVDQjBkMEpMbjFXY0dZY3d3Wjg3ZDJMQXAA',
               'clientActions': [{'formaction': {'formstatus': 'FORM',
                                                 'voteCount': {'accessibility': {'accessibilityData': {'label': '11 '
                                                                                                                'status'}},
                                                               'simpleText': '11'}}}]},
 'linkmetadata': {'weblinkmetadata': {'sendPost': True,
                                      'url': '/service_ajax'}},
 'linkparam': 'CDAQ46448omxw='}

如果您没有 cmets……

你可以这样做:

# insert ',' as a delimiter
html_source = html_source.replace('{"linkparam"', ', {"linkparame"')
# drop first comma
html_source = html_source[2:]
html_source = '[' + html_source + ']'

【讨论】:

  • 我在字符串中添加了注释来解释我到底想提取什么数据,在我的代码中没有注释
  • 如果您没有 cmets,您需要另一种方式来分隔项目。查看我的编辑
猜你喜欢
  • 2016-10-20
  • 2019-04-10
  • 2020-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多