从嵌套在多个div标记中的通用span标记中提取文本

2024-04-20 10:16:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在下面的html代码中获取文本(显示为日期)。代码a1v2v3根据页面的不同而变化,因此我不能将其用作引用或使用css选择器

相关HTML:

<div class="mvp-collapse-content-box">
<div data-v-a1v2v3="" class="mvp-row"><div data-v-a1v2v3="" class="mvp-tag mvp-tag-default mvp-tag-checked" style="margin-left: -16px; visibility: hidden;">
<!----> <span class="mvp-tag-text">LIVE</span> 
<!----></div><span data-v-a1v2v3="" style="display: inline-block;">
                  2019.06.12 17:09
                  <br data-v-a1v2v3="">

完整HTML:

<div class="mvp-collapse-content-box">
<div data-v-a1v2v3="">
<div data-v-a1v2v3="" class="mvp-collapse mvp-collapse-simple">
<div data-v-a1v2v3="" class="mvp-collapse-item mvp-collapse-item-active" style="padding-left: 6px;">
<div class="mvp-collapse-header">
<!----> <div data-v-a1v2v3="" class="mvp-row-flex mvp-row-flex-middle">
<div data-v-a1v2v3="" class="mvp-col mvp-col-span-18 mvp-col-span-xs-16 mvp-col-span-sm-18 mvp-col-span-md-18 mvp-col-span-lg-18"><div data-v-a1v2v3="" class="mvp-tag mvp-tag-blue mvp-tag-checked" style="margin-left: -16px;">
<!----> <span class="mvp-tag-text mvp-tag-color-white">LIVE</span> 
<!----></div><div data-v-a1v2v3="" class="versionAndMemo">
<span data-v-a1v2v3="" style="display: inline-block; line-height: 26px; vertical-align: middle; margin: 0px 1px; font-weight: bold; font-size: 14px;">1.2.3.44</span>
<!----></div></div>
<div data-v-a1v2v3="" class="mvp-col mvp-col-span-6 mvp-col-span-xs-8 mvp-col-span-sm-6 mvp-col-span-md-6 mvp-col-span-lg-6"><div data-v-a1v2v3="" style="display: inline-block; float: right; margin-right: 6px;"><i data-v-a1v2v3="" class="lal la-download" style="font-size: 1.8em; margin-top: 8px; display: table-cell; vertical-align: middle;"></i></div>
<div data-v-a1v2v3="" style="float: right; margin-right: 22px;"><i data-v-a1v2v3="" class="lal la-link" style="font-size: 1.8em; margin-top: 8px; display: table-cell; vertical-align: middle;"></i></div></div></div></div> <div class="mvp-collapse-content" style="" data-old-padding-top="" data-old-padding-bottom="" data-old-overflow="">
<div class="mvp-collapse-content-box">
<div data-v-a1v2v3="" class="mvp-row"><div data-v-a1v2v3="" class="mvp-tag mvp-tag-default mvp-tag-checked" style="margin-left: -16px; visibility: hidden;">
<!----> <span class="mvp-tag-text">LIVE</span> 
<!----></div><span data-v-a1v2v3="" style="display: inline-block;">
                  2019.06.12 17:09
                  <br data-v-a1v2v3="">

到目前为止,我掌握的情况如下:

        page = requests.get(app, headers=headers, cookies=cookies).text
        soup = BeautifulSoup(page, 'html.parser')

        for spantime in  soup.findAll("div", {"class": "mvp-collapse-content-box"}):
            print(spantime)

但什么也没印出来。我还尝试添加以下内容:

        page = requests.get(app, headers=headers, cookies=cookies).text
        soup = BeautifulSoup(page, 'html.parser')

        for spantime in  soup.findAll("div", {"class": "mvp-collapse-content-box"}):

            print(spantime.text)
            for span in  spantime.find_all('span', recursive=True):
                print(span.text)

但他们两个都没有打印任何东西。我有一种感觉,它可能与我使用的mvp-collapse-content-box类有关—该类的一些div标记不一定有span标记,如完整的HTML所示


Tags: textmargindivboxdatastyletagdisplay
2条回答

始终可以选择如下所示的子标记:

 div = soup.find("div", { "class" : "mvp-collapse-content-box" })
 spans = div.findChildren("span" , recursive=False)
 for span in spans:
    print span

使用find_next()查找span标记并使用text属性

from bs4 import BeautifulSoup
html='''<div class="mvp-collapse-content-box">
<div data-v-a1v2v3="" class="mvp-row"><div data-v-a1v2v3="" class="mvp-tag mvp-tag-default mvp-tag-checked" style="margin-left: -16px; visibility: hidden;">
<!  > <span class="mvp-tag-text">LIVE</span> 
<!  ></div><span data-v-a1v2v3="" style="display: inline-block;">
                  2019.06.12 17:09
                  <br data-v-a1v2v3="">'''

soup=BeautifulSoup(html,'html.parser')
div=soup.find('div',class_="mvp-collapse-content-box")
print(div.find_next('span').find_next('span').text.strip())

输出:

2019.06.12 17:09

相关问题 更多 >