【问题标题】:how to split a html page based on the presence of <p> <div> or <br> tags如何根据 <p> <div> 或 <br> 标签的存在来拆分 html 页面
【发布时间】:2013-07-30 10:12:04
【问题描述】:

我正在尝试根据位置将抓取的网页分成不同的部分 &lt;p&gt; &lt;br&gt;&lt;div&gt; 标签。所以第一个&lt;p&gt; 标签将包含从&lt;html&gt; 到有问题的&lt;p&gt; 标签的所有数据/标签。我看过 lxml 项目中的 etree 之类的东西,但它看起来很相切。

我从“正常” html 解析中看到的区别是选择的标签数量。我想选择多个标签及其数据并单独保存它们,而“普通” html 解析工具提供仅选择一个隔离标签/标签(使用 xpath 等)并使用它的能力。 (我对网络编程也很陌生)。

我已经想到了一种方法,我可以保存文件偏移量,然后继续对输入文件进行剪切和切片以实现我的目标,但它充其量似乎是 hackish。

我该如何实现我的既定目标,请帮助。

谢谢。

【问题讨论】:

  • beautifulsoup 会是一个很好的使用工具
  • 您好,感谢您的回答,但我应该在美丽的汤中使用什么。您能否更具体地说明如何将部分 html 树保存到单独的文件中

标签: python html-parsing beautifulsoup lxml


【解决方案1】:

使用BeautifulSoup。它是一个很棒的用于解析 HTML 的 Python 工具。

下面的例子展示了解析 HTML 是多么容易 - 它打印标签名称 (p) 和所有 &lt;p&gt; 标签的内容。然后它会找到 id 为“header”的元素。

这只是一个 sn-p - BeautifulSoup 提供了许多过滤 HTML 文档的方法。

import sys
# add path to beautifulsoup library
sys.path.append('/usr/local/var/beautifulsoup')
# import it
from bs4 import BeautifulSoup

soup = BeautifulSoup(open("yourfile.html"))
for tag in soup.find_all('p'):
    print tag.name, tag.text

soup.find(id="header")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 2018-05-19
    • 1970-01-01
    相关资源
    最近更新 更多