【问题标题】:Extract list of values using BeautifulSoup使用 BeautifulSoup 提取值列表
【发布时间】:2018-07-24 10:32:06
【问题描述】:

我目前正在尝试使用他们的RSS feed 自动解析 Ubuntu 的安全通知。我正在使用 feedparser,所以它工作得很好。我可以获得咨询的标题(feed.title)、相关链接(feed.link)等等。

我现在要做的是进一步解析输出,以便获取受影响的版本并将其存储以供进一步参考。

以下代码用于抓取提要并准备好进行解析。它还使用 BeautifulSoup 来解析 feed.summary,这似乎是包含我所追求的信息的“占位符”。

import feedparser
from bs4 import BeautifulSoup

ubuntu_url = 'https://usn.ubuntu.com/rss.xml'

feed = feedparser.parse(ubuntu_url)

for post in feed.entries:
    soup = BeautifulSoup(post.summary, 'html.parser')

如果我添加一个“print(soup.prettify())”,我可以在本节中看到我所追求的信息(这是包含其他几个列表元素的更大输出的一部分):

<p>A security issue affects these releases of Ubuntu and its derivatives:</p>

<ul>
<li>Ubuntu 18.04 LTS</li>
<li>Ubuntu 17.10</li>
<li>Ubuntu 16.04 LTS</li>
<li>Ubuntu 14.04 LTS</li>
</ul>

这个列表当然会有不同的长度,从一个版本向上。正如这个不同的示例所示:

<p>A security issue affects these releases of Ubuntu and its derivatives:</p>

<ul>
<li>Ubuntu 18.04 LTS</li>
</ul>

我一直试图弄清楚如何使用 BeautifulSoup 来解析它,并且只在“安全问题影响 Ubuntu 及其衍生版本的这些版本:”标题之后获取“&lt;ul&gt; &lt;/ul&gt;”部分中的条目。

我一直在查看文档以了解使用“find_all”功能的正确方法,但在这个阶段还没有设法解决这个难题。

有什么想法吗?

提前致谢。

【问题讨论】:

    标签: python beautifulsoup html-parsing


    【解决方案1】:

    使用段落文本

    演示:

    from bs4 import BeautifulSoup
    s = """<p>A security issue affects these releases of Ubuntu and its derivatives:</p>
    <ul>
    <li>Ubuntu 18.04 LTS</li>
    <li>Ubuntu 17.10</li>
    <li>Ubuntu 16.04 LTS</li>
    <li>Ubuntu 14.04 LTS</li>
    </ul>"""
    
    soup = BeautifulSoup(s, "html.parser")
    p_tag = soup.find("p", text="A security issue affects these releases of Ubuntu and its derivatives:")
    for li in p_tag.find_next_siblings("ul")[0].find_all("li"):
        print(li.text)
    

    输出:

    Ubuntu 18.04 LTS
    Ubuntu 17.10
    Ubuntu 16.04 LTS
    Ubuntu 14.04 LTS
    

    【讨论】:

    • 非常感谢更新版本。使用 para text 就可以了。一个障碍... ;-)
    【解决方案2】:

    随便用

    a = soup.findAll('li')
    for b in a:
        print(b)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-12
      • 1970-01-01
      相关资源
      最近更新 更多