【问题标题】:How to serialize beautifulsoup access-paths?如何序列化beautifulsoup 访问路径?
【发布时间】:2010-09-10 08:47:59
【问题描述】:

我有这样的代码:

item.previous.parent.parent.aTag['href']

现在我希望能够快速添加过滤器,因此不再可以选择硬编码。如何使用字符串中编码的路径访问相同的标签?

当然,我可以发明一些格式,例如 [('getattr', 'previous'), ('getattr', 'parent'), ..., ('getitem', 'href)] 并用 __getattr__ 解析它和 __getitem__。

现在的问题是:是否已经有更漂亮的方式来实现它,还是我需要自己实现它?

【问题讨论】:

    标签: python html parsing serialization beautifulsoup


    【解决方案1】:

    在我看来,使用 XPATH 表达式会更好。这个discussion 有一些关于BeautifulSoup 的XPATH 插件的信息,叫做BSXPath。我没用过,不知道能不能达到你的目的。

    如果您愿意替换 BeautifulSoup,那么 lxml 有一个非常强大的 XPATH 实现。

    更新

    查看@llasram对此答案的评论:

    如今,lxml 有一个 html 模块,BeautifulSoup 实现者自己推荐该模块而不是 BeautifulSoup。它甚至还有一个 soupparser 子模块,它将使用 BeautifulSoup 进行解析!

    【讨论】:

    • 我考虑过 xpath,但 beautifulsoup 很酷的一点是,我不需要依赖正确且稳定的 html,而是可以解析任何看起来像 html 的东西。
    • @allo:有效点。我认为在这种情况下你将不得不自己实现它。
    • 现在 lxml 有一个 html 模块,BeautifulSoup 的实现者自己推荐了该模块而不是 BeautifulSoup。它甚至还有一个soupparser 子模块,它将使用 BeautifulSoup 进行解析!
    猜你喜欢
    • 1970-01-01
    • 2017-11-21
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    相关资源
    最近更新 更多