如何使用美丽的汤打印多个具有不同输出/类别的相同标签

时间:2017-03-21 05:29:39

标签: html beautifulsoup tags

这是我第一次使用BeautifulSoup。

我有test.html

<html>
<body>
<div class='ts'>2012-03-14 09:17:55.433 +0300&nbsp;</div><div class='log'>No Error</div>
<div class='ts'>2012-03-14 12:18:55.433 +0300&nbsp;</div><div class='log'>Error: Missing module.</div>
</body>
</html>

我想找到div标记和ts log的所有行,并在终端上打印出这样的结果

<div class='ts'>2012-03-14 09:17:55.433 +0300&nbsp;</div><div class='log'>No Error</div>
<div class='ts'>2012-03-14 12:18:55.433 +0300&nbsp;</div><div class='log'>Error: Missing module.</div>

到目前为止我的代码

from bs4 import BeautifulSoup

soup = BeautifulSoup(open("test.html"))

def find_ts_and_log():
    items = soup.select('div.ts') + soup.select('div.log')
    for item in items:
        print item

find_ts_and_log()

但是这个脚本给了我这个结果

<div class='ts'>2012-03-14 09:17:55.433 +0300&nbsp;</div>
<div class='ts'>2012-03-14 12:18:55.433 +0300&nbsp;</div>
<div class='log'>No Error</div>
<div class='log'>Error: Missing module.</div>

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以将find_all()class_过滤器结合使用:

items = soup.find_all('div', class_=['ts','log'])
for item in items:
    print item

或者您可以先找到div.ts,然后从log属性中获取相应的next_sibling

items = soup.select('div.ts')
for item in items:
    print item, item.next_sibling