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)