【问题标题】:How to extract text from HTML label using BeautifulSoup (Python)?如何使用 BeautifulSoup (Python) 从 HTML 标签中提取文本?
【发布时间】:2014-05-22 15:59:42
【问题描述】:

我正在编写一个 Python 脚本,它可以与一些 HTML 交互。我目前正在使用 BeautifulSoup 来解析这个 HTML(我以前用过 XML,它太棒了!!!)我想知道从 HTML 中提取时间(文本)信息的最佳方法是什么。这是我在下面谈论的图片:

我正在尝试提取 "Room 225 8:00am" 、 "Room 225 8:30am" 等...

是否有人对可用于从标签中提取文本的 BeautifulSoup 函数有具体建议?

这也是原始的 HTML(美化):

<html>
 <body>
  <li class="zone even open day">
   <label for="srr-1-1397046600">
    Room 225 8:30 AM
   </label>
   <input id="srr-1-1397046600" name="srr-1-1397046600" type="checkbox" value="Y"/>
   <span class="drag-handle">
   </span>
  </li>
  ,
  <li class="zone even open day">
   <label for="srr-1-1397050200">
    Room 225 9:30 AM
   </label>
   <input id="srr-1-1397050200" name="srr-1-1397050200" type="checkbox" value="Y"/>
   <span class="drag-handle">
   </span>
  </li>
  ,
  <li class="zone even open day">
   <label for="srr-1-1397053800">
    Room 225 10:30 AM
   </label>
   <input id="srr-1-1397053800" name="srr-1-1397053800" type="checkbox" value="Y"/>
   <span class="drag-handle">
   </span>
  </li>
  ,
  <li class="zone even open day">
   <label for="srr-1-1397057400">
    Room 225 11:30 AM
   </label>
   <input id="srr-1-1397057400" name="srr-1-1397057400" type="checkbox" value="Y"/>
   <span class="drag-handle">
   </span>
  </li>
  ,
  <li class="zone even open day">
   <label for="srr-1-1397068200">
    Room 225 2:30 PM
   </label>
   <input id="srr-1-1397068200" name="srr-1-1397068200" type="checkbox" value="Y"/>
   <span class="drag-handle">
   </span>
  </li>
 </body>
</html>

【问题讨论】:

  • 请张贴HTML文本而不是截图;它使为您提供演示变得更加容易。
  • element.string 不适合您?你被困在哪里了?
  • @MartijnPieters 我尝试放入原始 HTML,但是,堆栈溢出一直将其作为真正的 HTML 读取。 element.string我没试过,让我试试吧。
  • 使用{} 缩进所有前导4 个空格的行。见How do I format my code blocks?

标签: python html beautifulsoup


【解决方案1】:

搜索label 元素,然后使用element.string attribute 获取标签文本。

在这里,CSS selector search 可能会有所帮助:

for label in soup.select('li.zone label'):
    print label.string

演示:

>>> for label in soup.select('li.zone label'):
...     print label.string
... 
Room 225 8:30 AM
Room 225 9:30 AM
Room 225 10:30 AM
Room 225 11:30 AM
Room 225 2:30 PM

【讨论】:

  • 快速提问...为什么 BeautifulSoup 功能仅限于使用“汤”。而不是任何变量?比如 var = soup.findAll(id='student') 然后做 var.prettify()
  • 但是findAll() 返回结果列表。所以你会做var[0].prettify()
  • 如果您使用 var = soup.find(id='student') 代替,您将获得第一个匹配项(按 ID 搜索是合乎逻辑的),并且您只会获得一个元素对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多