Как я могу очистить значение атрибута как строку, а не отдельные буквы, используя get_attribute?

Я использую селен (и, возможно, BS4) для очистки различных частей страниц результатов матчей (https://cuetracker.net/tournaments/gibraltar-open/2020/3542) для турниров за последние 4/5 лет, ссылки на которые я уже скопировал.

Я пытаюсь придумать какой-нибудь надежный код, чтобы вообще очищать разные биты данных, приведенные в этих результатах совпадения. Первоначально я пытался использовать частичный Xpath для очистки национальности каждого победившего игрока (LHS), но когда я пытаюсь получить значение атрибута, он возвращает список букв, а не национальности в виде строки.

Я думаю, что BS4 может быть более подходящим для этого, поскольку формат html может меняться с добавлением данных судей в некоторых турнирах, но использование частичного Xpath кажется приемлемым из того немногого, что я знаю.

Как я могу заставить get_attribute давать мне значения в виде строк, а не отдельных букв?

Было бы проще выполнить этот парсинг с помощью BS4, а не Selenium?

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.select import Select
from bs4 import BeautifulSoup

import os
import re
import time
import pandas as pd


def wait_for_page_load():
    timer = 15
    start_time = time.time()
    page_state = None
    while page_state != 'complete':
        time.sleep(0.5)
        page_state = browser.execute_script('return document.readyState;')
        if time.time() - start_time > timer:
            raise Exception('Timeout :(')


chrome_path = r"C:\Users\George\Desktop\chromedriver.exe"
browser = webdriver.Chrome(chrome_path)
page_source = browser.page_source

browser.get("https://cuetracker.net/seasons")
links = browser.find_elements_by_css_selector("table.table.table-striped a")
hrefs=[]
for link in links:
    hrefs.append(link.get_attribute("href"))

hrefs = hrefs[1:5]

hrefs2 = []

for href in hrefs:
    browser.get(href)
    wait_for_page_load()
    links2 = browser.find_element_by_xpath('.//tr/td[2]/a')
    for link in links2:
        hrefs2.append((link.get_attribute("href")))

Player_1_Nationality = []

for href in hrefs2:
    browser.get(href)
    wait_for_page_load()
    list_1_Nationality = browser.find_elements_by_xpath('.//div/div[2]/div[1]/b/img').get_attribute("alt")
    for lis in list_1_Nationality:
        Player_1_Nationality.append(lis)




['E',
 'n',
 'g',
 'l',
 'a',
 'n',
 'd',
 'E',
 'n',
 'g',
 'l',
 'a',
 'n',
 'd',
 'E',
 'n',
 'g',
 'l',
 'a',
 'n',
 'd',
 'E',
 'n',
 'g',
 'l',
 'a',
 'n',
 'd',
 'A',
 'u',
 's',
 't',
 'r',
 'a',
 'l',
 'i',
 'a',
 'E',
 'n',
 'g',
 'l',
 'a',
...


person Snoopy94    schedule 31.03.2020    source источник


Ответы (1)


find_elements_by_xpath() возвращает list of elements. Во время итерации просто используйте lis.get_attribute("alt")

for href in hrefs2:
    browser.get(href)
    wait_for_page_load()
    list_1_Nationality = browser.find_elements_by_xpath('.//div/div[2]/div[1]/b/img')
    for lis in list_1_Nationality:
        Player_1_Nationality.append(lis.get_attribute("alt"))
person KunduK    schedule 31.03.2020