无法提取所需的文本部分并丢弃某些元素中的其余部分
Unable to extract a desired portion of text and discard the rest out of some elements
我在我的 python 代码中使用了一个选择器来从一些 html elements
中得到 Soccer: Next To Play
。当我使用 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 代码中使用了一个选择器来从一些 html elements
中得到 Soccer: Next To Play
。当我使用 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