在SVG内部的路径中找到XPATH



我想为刮板找到正确的 XPath

我要做的是:刮擦玩家的市场价值。

问题:市场价值仅在HTML中显示在路径或俱乐部图像上时。

我不知道。

代码:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
url = 'https://www.transfermarkt.de/manuel-neuer/marktwertverlauf/spieler/17259'
driver = webdriver.Chrome()
driver.implicitly_wait(30)
driver.get(url)
time.sleep(5)
actions = ActionChains(driver)
actions.move_to_element_by_xpath('//*[@id="highcharts-0"]/div/span')
actions.move_to_element_by_xpath('//*[@id="highcharts-0"]/svg/g[5]/g[1]/path[1]')
actions.move_to_element_by_xpath('//*[@id="highcharts-0"]/svg/g[5]/g[2]/image[33]')
actions.perform()
date = driver.find_element_by_xpath('//*[@id="highcharts-0"]/div/span/b[1]').text
value = driver.find_element_by_xpath('//*[@id="highcharts-0"]/div/span/b[2]').text
club = driver.find_element_by_xpath('//*[@id="highcharts-0"]/div/span/b[3]').text
age = driver.find_element_by_xpath('//*[@id="highcharts-0"]/div/span/b[4]').text
print(date, value, club, age)

好吧,因此,如果我运行此代码,它将返回错误,作为日期,价值,俱乐部和年龄仅在悬停在路径上时出现。

如果我手动将鼠标移到svg中的俱乐部图像上,它将返回正确的数据。

那么,如何在此处找到move_to_element_by_xpath的正确xpath

我尝试了很多组合。

这不是一个干净的解决方案,因为我将JavaScript对象视为可以转换为有效的JSON。我从生成值的脚本标签中提取。@poke有所帮助。

有一些编码问题。
import requests
from bs4 import BeautifulSoup as bs
import json
url = 'https://www.transfermarkt.de/manuel-neuer/marktwertverlauf/spieler/17259'
headers = {'Host' : 'www.transfermarkt.de',
'Referer' : 'https://www.transfermarkt.de/manuel-neuer/marktwertverlauf/spieler/17259',
'User-Agent' : 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}
res = requests.get(url, headers = headers)
soup = bs(res.content,'lxml')
scripts = soup.select('script[type="text/javascript"]')
script = [script.text for script in scripts if 'CDATA' in script.text]

if len(script) > 0:
    s = script[1].split("'series':")[1].split(",'credits'")[0].replace("'",'"')
    data = json.loads(s.replace('\x', '\u00'))
    for item in data[0]['data']:
        print('Team: ' + item['verein'])
        print('Age: ' + str(item['age']))
        print('Date: ' + str(item['datum_mw']))
        print('Value' + str(item['y']))

@poke向我解释:

"代码使用 xab作为逃生序列,其中ab是引用字符的十六进制数字。另一个有效的逃生序列是 uabcd,用ABCD作为十六进制数字。通常, xab等于 u00ab既然是Unicode代码点的方式。因此,您可以从一个转换为另一个。而且由于 uabcd是JSON中有效的逃生序列,因此您可以解析。"

所以,我可以收集的是tooltiphttps://www.transfermarkt.de/fc-bayern-munchen/startseite/verein/27获取数据,因此从此链接中刮擦数据。

AS,数据可用,没有任何tooltips,您可以在该网页上轻松找到其xpath

最新更新