BeautifulSoup查找嵌套标签,儿童

时间:2018-06-24 23:40:54

标签: python beautifulsoup findall nextsibling

我看到了很多有关查找标签和标签内信息的信息,但是似乎找不到类似的简单信息。我想做的是在第三个“ td”元素中访问“ a”元素(在本例中为“美国”)的文本或标题。我遇到的问题是,第三个“ td”元素的“样式”与第一个“ td”元素(“ text-align:left”)相同,因此我无法对其进行过滤,并且nextSibling仅让我下一层,转到第二个“ td”元素。我的其余代码都可以正常工作(尽管即使我安装了Python 3.6.5和BS 4.6,尽管它使我使用了我认为已经过时的BeautifulSoup语法,但是我猜这是另一个问题)。我正在尝试使“国家/地区”变量正常工作,并且尝试了多种方法,但是没有尝试过任何方法,除了在末尾添加了一堆.next.next.next。

HTML(https://en.wikipedia.org/wiki/Toronto_FC#Current_roster):

<td style="text-align: left">
  <a href="/wiki/Goalkeeper_(association_football)"
  title="Goalkeeper (association football)">Goalkeeper</a>
</td>
<td style="padding-right:15px;">
    <span class="fn">...</span>
</td>
<td style="text-align: left">
    <span class="flagicon">...</span>
    <a href="/wiki/United_States" title="United States">United States</a> 
</td>

我的代码:

vcard = page_soup.findAll("tr", {"class": "vcard agent"})
cards = vcard[0]

for cards in vcard:
    league = page_soup.find("a", {"title": "Major League Soccer"})
    league_name = league.text

    team = page_soup.find("h1", {"class": "firstHeading"})
    team_name = team.text

    position = cards.a.text

    name = cards.findAll("span", {"class": "fn"})
    player_name = unidecode(name[0].text)

    ***this variable not working***
    country = cards.find("td", {"style": "text-align: left")

1 个答案:

答案 0 :(得分:1)

如有疑问,请使用CSS选择器。毫无疑问,请使用css-selectors

但是很明显,只有在您确定它始终是第三个td

时,它才有效
country = cards.select_one('td:nth-of-type(3) a')
print(country['title'], country.text)