使用BeautfulSoup Issue提取子标签文本

时间:2019-07-09 20:42:42

标签: python html parsing beautifulsoup

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

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

现在,我已经创建了捕获所有这些实例的代码,但是,即使我在代码中使用find实例捕获下一个标记,我也会在此方面遇到错误。我怀疑有一种方法可以解析接收到的文本,但就目的而言,这会很多,尤其是当页面很多时。

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)

所以我一生都无法捕获下一个标记-我已经尝试了一系列迭代,而运行此代码时出现的错误如下:

  

AttributeError:ResultSet对象没有属性'find_next'。你是   可能将项目列表像单个项目一样对待。你打过电话吗   当您打算调用find()时使用find_all()?

如何解决此问题?

2 个答案:

答案 0 :(得分:0)

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') )

答案 1 :(得分:0)

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

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

名称全部在ID为th的表主体(tbody)的stats_player

或者

#stats_player th.left a

这些方法比使用诸如以下属性的替代方法要快一些:

#stats_player [data-append-csv]