[FIXED] Abrufen des td-Werts von tr, der einen bestimmten anderen td-Wert hat

Ausgabe

Sie müssen die Links von einem td in Zeilen abrufen, die einen bestimmten td-Wert haben.

Dies ist ein Tr in der Tabelle und ich möchte den Link von der Div “Match” erhalten, wenn die Div “Heimmannschaft” einen bestimmten Wert hat. Es gibt viele Zeilen und ich möchte jeden passenden Link finden. Ich habe das versucht und jedes Mal bekomme ich nur die erste Zeile der Tabelle. Hier ist der Link https://wp.nif.no/PageTournamentDetailWithMatches.aspx?tournamentId=403373&seasonId=200937&number=all . Beachten Sie, dass ich einige der Werte in den folgenden Beispielen ins Englische übersetzt habe

homegames = browser.find_elements_by_xpath('//div[@data-title = "Home team"]/a[text()="Cleveland"]//parent::div//parent::td//parent::tr')

for link in homegames:
    print(link.find_element_by_xpath('//td[3]/div/a').get_attribute('href'))
<td><div data-title="Date">23.10.2021</div></td>
<td><div data-title="Tid">16:15</div></td>
<td>div data-title="Matchnr">
        <a href="/MatchDetails?id=743062">2121503051</a>
</div>
</td><td><div data-title="Home team"><a href="/PageOrgDetail.aspx?LinkId=86613" title="Cleveland Basket - MEN 4">Cleveland</a></div></td>
<td><div data-title="Away team">
        <a href="/PageOrgDetail.aspx?LinkId=890549" title="SSK Ohio Basketball - MEN 3">Ohio Travellers</a></div></td>
<td><div data-title="Court"><a href="">F21</a></div></td><td><div data-title="Result">71 - 64</div></td>
<td><div data-title="Referee">John Doe<br>Will Smith<br></div></td></tr>```

Lösung

Die Daten befinden sich in der HTML-Quelle (also keine Notwendigkeit, Selenium zu verwenden). Aber unabhängig davon, ob Sie Selen verwenden oder nicht, was Sie hier tun können, ist, BeautifulSoup die spezifischen Tags finden zu lassen, nach denen Sie suchen.

Ohne Selenium erfordert es eine kleine Manipulation, da das HTML dekodiert wird.

import requests
from bs4 import BeautifulSoup
import json
import html

keyword = 'Askim'

url = 'https://wp.nif.no/PageTournamentDetailWithMatches.aspx?tournamentId=403373&seasonId=200937&number=all'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

jsonStr = soup.find('div', {'class':'xwp_table_bg'}).find_next('input')['value']
jsonData = json.loads(jsonStr)

links_list = []
for each in jsonData['data']:
    #each = jsonData['data'][6]
    htmlStr = ''.join(each)
    htmlStr = html.unescape(htmlStr)
    soup = BeautifulSoup(htmlStr, 'html.parser')

    if soup.find('div', {'data-title':'Hjemmelag'}, text=keyword):
        link = soup.find('div', {'data-title':'Kampnr'}).find('a')['href']
        links_list.append(link)


Beantwortet von –
chitown88


Antwort geprüft von –
Dawn Plyler (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like