【问题标题】:Scrape content inside DIV - BeautifulSoup抓取 DIV 中的内容 - BeautifulSoup
【发布时间】:2015-01-05 02:13:24
【问题描述】:

我正在使用 BeautifulSoapPython 一起抓取

我必须刮掉DIV里面的文字

<div class="map-address">
   O'Riordan Street,               
   Mascot 2020 NSW Australia, 
   (Corner Robey Street)
</div>

我有这个代码

print (soup.select('div.map-address'))

但我得到了这个输出

[<div class="map-address">
   O'Riordan Street,               
   Mascot 2020 NSW Australia, 
   (Corner Robey Street)
</div>]

我也试过了

print (soup.select('div.map-address').text)
# Error ... no attribute named text

【问题讨论】:

  • 拒绝投票但有一些解释

标签: python css-selectors beautifulsoup


【解决方案1】:

你可以简单地使用它,

>>> for i in soup.select('div.map-address'):
    print(i.string)



   O'Riordan Street,               
   Mascot 2020 NSW Australia, 
   (Corner Robey Street)

通过CSS selectors 和列表理解。

>>> print ([i.text for i in soup.select('div.map-address')][0])

通过soup.find。我们明确地告诉类属性的值是什么。

>>> print([i.string for i in soup.find('div', class_='map-address')][0])

   O'Riordan Street,               
   Mascot 2020 NSW Australia, 
   (Corner Robey Street)

【讨论】:

  • 我只有一个 DIV 为什么要使用 FOR 循环
  • 如果有 0 个或超过 1 个 divs,则循环很好地处理。现在可能没有,但你永远不知道未来。
【解决方案2】:

怎么样

print (soup.select('div.map-address')[0].get_text().strip())

请记住,select 正在向您返回一个列表。这就是为什么您在打印它时会看到它周围的 [] 以及为什么当您尝试读取 text 属性时会出现错误(您要求的是列表的 text 属性)。

因此,如果您获取第零个元素并在其上调用get_text,它将为您提供所需的内容。我添加了strip 以删除周围的空白。

不漂亮,但它有效。

【讨论】:

  • 感谢strip() M 是 PHP 开发人员,但第一次使用 Python 编码
【解决方案3】:

我解决了:

if not soup.select('div.map-address'):
    print ("No Address")
else:
    print (hotel_page_soup.select('div.map-address')[0].text)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多