我看到了很多有关查找标签和标签内信息的信息,但是似乎找不到类似的简单信息。我想做的是在第三个“ 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")
答案 0 :(得分:1)
如有疑问,请使用CSS选择器。毫无疑问,请使用css-selectors
但是很明显,只有在您确定它始终是第三个td
country = cards.select_one('td:nth-of-type(3) a')
print(country['title'], country.text)