我正在寻找一个用于Python的HTML解析器模块,它可以帮助我以Python列表/字典/对象的形式获取标记.

如果我有以下表格的文件:

<html>
<head>Heading</head>
<body attr1='val1'>
    <div class='container'>
        <div id='class'>Something here</div>
        <div>Something else</div>
    </div>
</body>
</html>

然后,它应该给我一种通过HTML标记的名称或id访问嵌套标记的方法,这样我基本上可以要求它获取div标记中的内容/文本,body标记中包含class='container',或者类似的内容.

如果您使用过Firefox的"判断元素"特性(查看HTML),您就会知道它以一种很好的嵌套方式给出了所有标记,就像树一样.

我更喜欢内置模块,但这可能要求太高了.


我浏览了很多关于Stack Overflow的问题和互联网上的一些博客,其中大多数都建议使用BeautifulSoup、lxml或HTMLParser,但很少有详细说明功能的问题,只是以争论哪个更快/更有效而告终.

推荐答案

这样我就可以让它获取div标记中的内容/文本,以及body标记中包含的class='container',或者类似的内容.

try: 
    from BeautifulSoup import BeautifulSoup
except ImportError:
    from bs4 import BeautifulSoup
html = #the HTML code you've written above
parsed_html = BeautifulSoup(html)
print(parsed_html.body.find('div', attrs={'class':'container'}).text)

我想你不需要性能描述——只要看看BeautifulSoup是如何工作的.看看它的official documentation.

Python相关问答推荐

如何在__init__.py中调整我的外部自定义库导入?

在pandas DataFrame上运行apply()时如何访问DateTime索引?

如何从同一类的多个元素中抓取数据?

隐藏QComboBox的指示器(qdarkstyle)

使用decorator 重复超载

FastAPI:使用APIRouter路由子模块功能

如何对行使用分段/部分.diff()或.pct_change()?

KNN分类器中的GridSearchCV

指示组内的rejected_time是否在creation_timestamp后5分钟内

Python plt.text中重叠,包adjust_text不起作用,如何修复?

如何在Deliveryter笔记本中从同步上下文正确地安排和等待Delivercio代码中的结果?

Python在tuple上操作不会通过整个单词匹配

韦尔福德方差与Numpy方差不同

从收件箱中的列中删除html格式

删除任何仅包含字符(或不包含其他数字值的邮政编码)的观察

为什么带有dropna=False的groupby会阻止后续的MultiIndex.dropna()工作?

' osmnx.shortest_track '返回有效源 node 和目标 node 的'无'

如何在python polars中停止otherate(),当使用when()表达式时?

如何在UserSerializer中添加显式字段?

Polars asof在下一个可用日期加入