无法提取所需的文本部分并从某些元素中删除其余部分

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法提取所需的文本部分并从某些元素中删除其余部分相关的知识,希望对你有一定的参考价值。

我在我的python代码中使用了一个选择器来从某些Soccer: Next To Play中获取html elements。当我使用for loop.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中的图像中删除某些文本?

递归过滤/减少嵌套对象

如何从一行中删除某些单词,但将其余部分放入带有批处理的字符串/变量中?

从矩形中提取文本时的 ItextSharp anagram 输出