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

标签 python html beautifulsoup extract

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

问题:我似乎无法识别和提取特定文本。我已经搜索过这个网站并尝试过但没有成功。

示例 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 元素!

谢谢

最佳答案

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

...
dl_data = soup.find_all("dd")
for dlitem in dl_data:
    print dlitem.string

结果:

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

对于您的最新请求:

for item in list(zip(soup.find_all("dd")[0::3],soup.find_all("dd")[2::3])):
    date, salary = item
    print ', '.join([date.string, salary.string])

输出:

13 September 2015, 100
14 September 2015, 200

关于python - 使用 BeautifulSoup 提取特定的 dl 和 dd 列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32475700/

相关文章:

javascript - 一次滚动左 div 和右 div

html - 如何使用两个按钮将一个 html 页面重定向到另外两个 html 页面?

python - 使用 BeautifulSoup 和 selenium 抓取特定的标签 html

Python re.findall 之后返回带有不需要的字符串的链接

python - 如果 dict().fromkeys() 都指向同一个对象,那么默认值参数有什么用呢?

python - 行代码返回打开文件的语法错误

python - 美丽汤的谷歌新闻标题标签

python - 如何打印给定特征的类别出现次数?

javascript - 使用 jQuery 时出现奇怪的 IE8 错误

python - <span> 内没有类的 BS4 文本