如何使用Beautiful Soup查找children元素的children元素

时间:2019-03-05 17:42:02

标签: python html beautifulsoup

我是python的新手。我想使用BeautifulSoup获取论坛中的发布日期。我尝试了许多方法,但无法获得正确的结果。

这是我的问题:

<td class = by>
    <cite>...</cite>
    <em>
        <span>2015-11-13</span>
    </em>
    </td>
<td class = ...>...</td>
<td class = by>...</td>
    <cite>...</cite>
    <em><a>...</a></em>
    </td>

有2个同名的课程“ by”,但我只希望第一个带有“ span”标签的日期。

这是我尝试过的,但不知道出了什么问题:

cat=1
    for span in soup.findAll('span', {'class':"by"}):
        print (span.text)

1 个答案:

答案 0 :(得分:1)

一个通用的解决方案是遍历<td>的{​​{1}}并找到class='by'。 从bs4导入BeautifulSoup

<span>

一种更直接的方法是

a="""<td class = by>
    <cite>...</cite>
    <em>
        <span>2015-11-13</span>
    </em>
    </td>
<td class = ...>...</td>
<td class = by>...</td>
    <cite>...</cite>
    <em><a>...</a></em>
    </td>"""

soup = BeautifulSoup(a, 'html.parser')
for item in soup.find_all("td",{"class": "by"}):
    for i in item.find_all("span"):
        print(i.text) # 2015-11-13

如果您只关心第一次出现的情况,则可以使用@Jon Clements的建议

soup.select('td.by > em > span')[0].text # 2015-11-13