首页 > 解决方案 > 如何获取该表的具体文本?

问题描述

我对 BeatifulSoup 非常熟悉,但无法为以下内容构建字符串: HTML 是我要抓取的页面的片段(顺便说一下,我可以抓取):

import bs4 as BeautifulSoup
    
data= """<dl class="markt_expose_deflist markt_expose_deflist_lineless">
 <dt>
  Ort
 </dt>
 <dd>
  80995
  <a href="https://www.markt.de/suche.htm" title="München">
   München
  </a>
 </dd>
 <dt>
  Anzeigentyp
 </dt>
 <dd>
  Privatangebot
 </dd>
 <dt>
  Anzeigendatum
 </dt>
 <dd>
  04.10.2020
 </dd>
 <dt>
  Anzeigenkennung
 </dt>
 <dd>
  <a href="https://some.link/">
   blabla
  </a>
 </dd>
 <dt>
  Aufrufe dieser Anzeige
 </dt>
 <dd>
  734
 </dd>
</dl>"""
    
soup = BeautifulSoup(data, 'html.parser')

我想将 HTML 中的日期 04.10.2020 分配给变量日期。我最后一次尝试是这样的:

date = soup.find('dl',{'class':'markt_expose_deflist markt_expose_deflist_lineless'}).find('dt',{'text':'Anzeigentyp'}).find('dd').text

但它没有用。

标签: pythonpython-3.xbeautifulsoup

解决方案


日期存在于第三个dd标签中,因此只需使用该find_all方法查找所有dd标签并将第三个dd标签(索引为 2)中存在的文本分配给 var date。而且你的import说法也是错误的。我这边的另一个建议是使用html5lib而不是html.parser. 这是最终代码:

from bs4 import BeautifulSoup

data= """    <dl class="markt_expose_deflist markt_expose_deflist_lineless">
        <dt>
          Ort
        </dt>
        <dd>
          80993&nbsp;<a href="https://www.markt.de/suche.htm" title="München">München</a>
        </dd>
      <dt>
        Anzeigentyp
      </dt>
      <dd>
        Privatangebot
      </dd>
        <dt>
          Anzeigendatum
        </dt>
        <dd>
          04.10.2020
        </dd>
        <dt>
          Anzeigenkennung
        </dt>
        <dd>
          <a href="https://some.link/">f2e7ae76</a>
        </dd>
        <dt>
          Aufrufe dieser Anzeige
        </dt>
        <dd>
          689
        </dd>
    </dl>"""

soup = BeautifulSoup(data, 'html5lib')

date = soup.find('dl',{'class':'markt_expose_deflist markt_expose_deflist_lineless'})

date = date.find_all('dd')[2].text.strip()

print(date)

输出:

04.10.2020

推荐阅读