python - 如何获取该表的具体文本?
问题描述
我对 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
但它没有用。
解决方案
日期存在于第三个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 <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