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

Я использую селен (и, возможно, 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',
...

Ответы [ 2 ]

1 голос
/ 31 марта 2020

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"))
1 голос
/ 31 марта 2020
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:/chromedriver_win32/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_elements_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')
    for lis in list_1_Nationality:
        Player_1_Nationality.append(lis.get_attribute("alt"))
...