首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在带有特定文本的<td>标记旁边获取<th>文本

在带有特定文本的<td>标记旁边获取<th>文本
EN

Stack Overflow用户
提问于 2020-11-25 17:20:17
回答 1查看 41关注 0票数 0

我想从transfermarkt.de上检索几个玩家的信息,比如曼努埃尔·诺伊尔生日。下面是相关的html的样子:

代码语言:javascript
复制
<tr>
    <th>Geburtsdatum:</th>
    <td>
        <a href="/aktuell/waspassiertheute/aktuell/new/datum/1986-03-27">27.03.1986</a>                                     
    </td>
</tr>

我知道我可以通过使用以下代码获得日期:

代码语言:javascript
复制
soup = BeautifulSoup(source_code, "html.parser")
player_attributes = soup.find("table", class_ = 'auflistung')
rows = player_attributes.find_all('tr')
date_of_birth = re.search(r'([0-9]+\.[0-9]+\.[0-9]+)', rows[1].get_text(), re.M)[0]

但这是相当脆弱的。对于罗伯特·莱万多夫斯基来说,出生日期处于不同的位置。因此,出现在球员配置文件中的属性是不同的。有什么方法能在逻辑上做到

  • 在标签中找到带有“Geburtsdatum:”的标签
  • 立即获取标记的文本。

越健壮越好:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-25 21:06:33

BeautifulSoup允许使用findNext()方法检索下一个兄弟姐妹。

代码语言:javascript
复制
from bs4 import BeautifulSoup
import requests

html = requests.get('https://www.transfermarkt.de/manuel-neuer/profil/spieler/17259', headers = {'User-Agent': 'Custom'})
soup = BeautifulSoup(source_code, "html.parser") 
player_attributes = soup.find("table", class_ = 'auflistung') 
rows = player_attributes.find_all('tr') 

def get_table_value(rows, table_header):
    for row in rows:
        helpers = row.find_all(text=re.compile(table_header))
        if helpers is not None:
            for helper in helpers:
                return helper.find_next('td').get_text()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65009727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档