提取 i 和 br 标签中存在的信息并保存在字典中

神巴嘎拉詹

我有 HTML 页面,我需要在其中提取 i 标签和 br 标签中的信息并将其保存在字典中,如下所示,

<div class="rbody">
<div style="color:#ff6666"> </div>
<i>objectid: </i> 137000<br/>
<i>topoid: </i> 504514394<br/>
<i>poigroup: </i> Hydrography<br/>
<i>poitype: </i> Manmade Waterbody<br/>
<i>poiname: </i> FOUR CORNERS DAM<br/>
<i>poilabel: </i> FOUR CORNERS DAM<br/>
<i>poilabeltype: </i> NAMED<br/>
<i>poialtlabel: </i> <br/>
<i>Point:</i><br/>
<i>X: </i> 1.5778346701624997E7 <br/>
<i>Y: </i> -3861557.6243750006 <br/>
<br/><br/>
</div>

我可以使用类 rbody 提取 div 标签中存在的文本。即使我能够提取 i 标签之间的内容,但不能提取 br 标签之前的信息。任何人都可以提出一种方法来提取信息并将其保存为字典中的键值对。例如

dictionary = {'objectid': 137000, 'topoid': 504514394, 'poigroup': 'Hydrography', 'poitype':'Manmade Waterbody', 'poiname' : 'FOUR CORNERS DAM', 'X':1.5778346701624997E7, 'y':-3861557.6243750006}
泽维尔

为什么不为此使用正则表达式,您不需要解析实际的 HTML(除非您还需要位置信息):

import re

data = """
<div class="rbody">
<div style="color:#ff6666"> </div>
<i>objectid: </i> 137000<br/>
<i>topoid: </i> 504514394<br/>
<i>poigroup: </i> Hydrography<br/>
<i>poitype: </i> Manmade Waterbody<br/>
<i>poiname: </i> FOUR CORNERS DAM<br/>
<i>poilabel: </i> FOUR CORNERS DAM<br/>
<i>poilabeltype: </i> NAMED<br/>
<i>poialtlabel: </i> <br/>
<i>Point:</i><br/>
<i>X: </i> 1.5778346701624997E7 <br/>
<i>Y: </i> -3861557.6243750006 <br/>
<br/><br/>
</div>
"""

parsed = dict(element for element in re.findall(r"<i>\s*(.*?):.*?</i>\s*(.*?)\s*<br/>", data))
print(parsed)
# {'poigroup': 'Hydrography', 'objectid': '137000', 'topoid': '504514394', 'poilabeltype': 'NAMED', 'X': '1.5778346701624997E7', 'Point': '', 'poialtlabel': '', 'poitype': 'Manmade Waterbody', 'poiname': 'FOUR CORNERS DAM', 'poilabel': 'FOUR CORNERS DAM', 'Y': '-3861557.6243750006'}

如果您希望将 X 和 Y 转换为浮点数等,您可能需要进行额外的后处理。对于通用解决方案,您可能希望尝试将每个值转换为您可以接受的内容:

def conv(pair):
    if len(pair) < 2 or not pair[1]:
        return pair[0], None
    try:
        return pair[0], int(pair[1])
    except ValueError:
        try:
            return pair[0], float(pair[1])
        except ValueError:
            return pair

parsed = dict(conv(element) for element in re.findall(r"<i>\s*(.*?):.*?</i>\s*(.*?)\s*<br/>", data))
print(parsed)
# {'X': 15778346.701624997, 'Y': -3861557.6243750006, 'objectid': 137000, 'poilabeltype': 'NAMED', 'poialtlabel': None, 'poiname': 'FOUR CORNERS DAM', 'poitype': 'Manmade Waterbody', 'Point': None, 'poilabel': 'FOUR CORNERS DAM', 'topoid': 504514394, 'poigroup': 'Hydrography'}

它是如何工作的:简单,它在<i><br/>标签之间搜索两个匹配组 - 一个紧跟在它之后,允许空格,一个在它之后</i>再次允许空格。所有这样的匹配都被捕获,并使用第一个捕获的组作为键和第二个作为新的值循环dict

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

<br>标签内的Beautifulsoup提取

来自分类Dev

如何使用xpath和python提取包含不需要的BR标签的标签之间的文本?

来自分类Dev

与beautifulsoup BR标签之间提取数据

来自分类Dev

替换beautifulsoup中的<p>和<br>标签

来自分类Dev

使用硒提取<br>标记之前和之后的数据

来自分类Dev

LISP文件I / O-提取和转换信息

来自分类Dev

LISP文件I / O-提取和转换信息

来自分类Dev

1次I / O传递中以numpy提取和字典的最快方法

来自分类Dev

1次I / O传递中以numpy提取和字典的最快方法

来自分类Dev

\ n和<br />在php中的区别

来自分类Dev

Android:替换<p>和<br />标签

来自分类Dev

Android:替换<p>和<br />标签

来自分类Dev

角度重复车把和<br />标签

来自分类Dev

在文本中查找和提取主题标签

来自分类Dev

如何使用python提取文本,链接和链接后的文本以及br之后的文本

来自分类Dev

Rails:如果存在,则简洁地打印变量名称和 <br /> 标签

来自分类Dev

从稀疏矩阵中提取i和j

来自分类Dev

在tinyMCE编辑器中需要同时具有p标签和br标签

来自分类Dev

R:如何从文本数据中删除\ n和<br />

来自分类Dev

在Mechanize中获取br.forms()的键和值

来自分类Dev

<br>和:: after或:: before

来自分类Dev

如何从隔离表中<br>标记的文本节点中提取文本?

来自分类Dev

从字符串的开头和结尾删除BR标签

来自分类Dev

从字符串的开头和结尾删除BR标签

来自分类Dev

如何用\ n替换</br>和<br/>?

来自分类Dev

如何用\ n替换</br>和<br/>?

来自分类Dev

从 R 中的 csv 提取和绘制条件信息

来自分类Dev

python中的XML vs字典,用于搜索和提取

来自分类Dev

Python:从嵌套的字典和列表中递归提取注释树

Related 相关文章

热门标签

归档