如何使用'style'属性从<div>获取文本?</div>

时间:2013-07-31 15:55:56

标签: python parsing beautifulsoup

我想从此link获取学校的地址信息。我感兴趣的HTML看起来像这样:

<div style="float:left;width:100%;padding-top:10px;padding-bottom:30px;">
  <div>1936 North St.</div>
  <div>Natchitoches, TX 75962</div>
  <div>936-468-2901</div>
</div>

所需的文字是:

1936 North St.
Natchitoches, TX 75962
936-468-2901

以下是我的尝试:

address = soup.find('div', 'float:left;width:100%;padding-top:10px;padding-bottom:30px;')
print address

我的输出:None

我认为soup.find()将一个属性作为参数,而'style'是一个属性,所以传递属性的名称会得到内容......

关于如何获取地址文本的任何建议或BeautifulSoup实现?

2 个答案:

答案 0 :(得分:3)

这将完全符合您的要求:

address = soup.find('div', {'style':'float:left;width:100%;padding-top:10px;padding-bottom:30px;'})
print address.get_text()

使用dict定义style attr

使用get_text()在代码之间获取文字

答案 1 :(得分:1)

要按属性搜索,您需要告诉BeautifulSoup要查看哪个属性。有几种方法可以做到这一点:

>>> soup.find('div', style='float:left;width:100%;padding-top:10px;padding-bottom:30px;')
<div style="float:left;width:100%;padding-top:10px;padding-bottom:30px;">
<div>1936 North St.</div>
<div>Natchitoches, TX 75962</div>
<div>936-468-2901</div>
</div>
>>> soup.find('div', {
...     'style': 'float:left;width:100%;padding-top:10px;padding-bottom:30px;'
... })
<div style="float:left;width:100%;padding-top:10px;padding-bottom:30px;">
<div>1936 North St.</div>
<div>Natchitoches, TX 75962</div>
<div>936-468-2901</div>
</div>

如果您正在搜索class属性,后者非常有用,该属性不能是关键字参数,因为它是Python中的保留字。