python - 无法提取所需的文本部分并丢弃某些元素中的其余部分

标签 python python-3.x beautifulsoup css-selectors

我在 python 代码中使用了选择器从一些 html 元素 中获取 Soccer: Next To Play。当我使用 for 循环.extract() 不需要的部分时,它工作得很好。但是,除了我在下面所做的事情之外,还有什么更好的方法可以从元素中获取上述文本,或者至少使用单行表达式执行相同的操作。

from bs4 import BeautifulSoup

content='''
  <div class="page-title-new">
   <h1>
    Soccer: Next To Play
    <span aria-hidden="true" class="race-large ng-hide" ng-show="vm.hasRaceNumber()">
     RACE
    </span>
    <span aria-hidden="true" class="race-small ng-hide" ng-show="vm.hasRaceNumber()">
     R
    </span>
    <span aria-hidden="true" class="ng-hide" ng-show="vm.hasRaceNumber()">
    </span>
   </h1>
   <div aria-hidden="true" class="page-info-new ng-hide" ng-show="vm.hasEventDetailItems()">
    <!-- -->
   </div>
  </div>
'''

soup = BeautifulSoup(content,"lxml")
for item in soup.select(".page-title-new h1"):
    for elem in item.select("span"):elem.extract()
    print(item.text.strip())

# items = [item.text for item in soup.select(".page-title-new h1")] #what to do to finish it as a one-liner
# print(items)

通过循环我得到的东西(这是我希望在没有循环或单行代码的情况下得到的东西):

Soccer: Next To Play

没有循环我得到什么:

Soccer: Next To Play RACE R

最佳答案

使用 soup.select_one() 方法(仅查找与 CSS 选择器匹配的第一个标签):

...
soup = BeautifulSoup(content,"lxml")
result = soup.select_one(".page-title-new > h1").contents[0].strip()

print(result)

输出:

Soccer: Next To Play

关于python - 无法提取所需的文本部分并丢弃某些元素中的其余部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47978213/

相关文章:

python - 在python中使用selenium查找通过类名找到的元素的id

python - 从 python 3.X 中的深层嵌套字典中打印特定键和值

python 模拟方法返回模拟而不是 return_value?

python - Scrapy csv 输出 "randomly"缺少字段

python - 在Docker项目中保存更改

python - Python 杂货购物程序中的错误

python - 使用 Inspect 元素进行抓取

python - 从 html 中获取内容并将获取的内容以特定格式写入 CSV

Python - 使用 BeautifulSoup 从 URL 列表中抓取文本的最简单方法

python-3.x - 替代全局变量?