使用美颜汤问题提取子标签文本



我正在运行的某些代码有问题。这是提取并最终创建网站上的名称列表。这是为了捕获以下名称:

<th class="left " data-append-csv="David-Cornell" data-stat="player" scope="row"><a href="/en/players/0c9aad01/David-Cornell">David Cornell</a></th>

现在我已经创建了代码来捕获所有这些实例,但是即使我在代码中使用查找实例来捕获下一个标记,我也会遇到错误。我怀疑有一种方法可以让我只解析收到的文本,但出于目的,这将是相当多的,特别是当有很多不同的页面时。

from bs4 import BeautifulSoup as bsoup
import requests as reqs
page = reqs.get("https://fbref.com/en/squads/986a26c1/Northampton-Town")
parsepage = bsoup(page.content, 'html.parser')
findplayers = parsepage.find_all('th',attrs={"data-stat":"player"}).find_next('a')
print(findplayers)

所以我一生都无法捕获下一个标签 - 我已经尝试了一系列迭代,运行它时我得到的错误如下:

属性

错误:结果集对象没有属性"find_next"。你是 可能将项目列表视为单个项目。你打过电话吗 find_all(( 当你打算调用 find(( 时?

如何解决此问题?

find_all给出了包含许多元素的列表,您必须将find_next与每个元素分开使用。你必须使用for

循环
from bs4 import BeautifulSoup as bsoup
import requests as reqs
page = reqs.get("https://fbref.com/en/squads/986a26c1/Northampton-Town")
parsepage = bsoup(page.content, 'html.parser')
finndplayers = parsepage.find_all('th',attrs={"data-stat":"player"})
for item in findplayers:
    print( item.find_next('a') )

您可以更改选择器,并执行以下操作select

players = [item.text for item in parsepage.select('#stats_player tbody th')]

这些名称都在表体(tbody(的th中,ID为stats_player

或者或者

#stats_player th.left a

这些比使用以下属性的替代方案略快:

#stats_player [data-append-csv]

最新更新