使用BeautifulSoup提取特定的dl和dd列表元素

问题描述 投票:3回答:2

我第一次发布。我正在使用BeautifulSoup 4和python 2.7(pycharm)。我有一个包含元素的网页,我需要提取标记为“ Salary:”或“ Date:”的特定元素,该页面包含多个列表。

问题:我似乎无法识别和提取特定文本。我已经搜索了该站点并尝试未成功。

示例html:

<dl><dt>Date:</dt><dd>13 September 2015</dd><dt>Salary:</dt><dd>Starting at £40,130 per annum.</dd></dl><dl><dt>Date:</dt><dd>15 December 2015</dd><dt>Salary:</dt><dd>Starting at £22,460 per annum.</dd></dl><dl><dt>Date:</dt><dd>10 January 2014</dd><dt>Salary:</dt><dd>Starting at £18,160 per annum.</dd></dl>

我尝试不成功的代码:

r = requests.get("http://www.mywebsite.com/test.html")
soup = BeautifulSoup(r.content, "html.parser")
dl_data = soup.find_all("dl")
for dlitem in dl_data: 
    print dlitem.find("dt",text="Date:").parent.findNext("dd").contents[0]
    print dlitem.find("dt",text="Salary:").parent.findNext("dd").contents[0]

预期结果:

13 September 2015
15 December 2015
10 January 2014
Starting at £40,130 per annum.
Starting at £22,460 per annum.
Starting at £18,160 per annum.

实际结果:

print dlitem.find("dt",text="Date:").parent.findNext("dd").contents[0]
AttributeError: 'NoneType' object has no attribute 'parent'

我已经尝试了此代码的多种变体,并且转了一圈,我想出了如何将所有dd元素打印到屏幕上,而不是特定的dd元素!]

谢谢

我第一次发布。我正在使用BeautifulSoup 4和python 2.7(pycharm)。我有一个包含元素的网页,我需要提取标记为'Salary:'或'...

python html beautifulsoup extract
2个回答
5
投票

如果顺序不重要,请进行一些更改:


0
投票

我想如果您只在代码中省略.parent,它会起作用。至少这可以解决我的问题,这与您的问题非常相似。

© www.soinside.com 2019 - 2024. All rights reserved.