Зачистка каждого элемента из каждой строки из таблицы HTML - PullRequest
0 голосов
/ 08 октября 2019

Ссылка на сайт: http://www.tennisabstract.com/cgi-bin/player-classic.cgi?p=RafaelNadal

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

Row1Element1, Row1Element2, Row1Element3 
Row2Element1, Row2Element2, Row2Element3
Row3Element1, Row3Element2, Row3Element3

У меня было две основные попытки кодирования этого:

Попытка 1:

rows = driver.find_elements_by_xpath('//table//body//tr')
elements = rows.find_elements_by_xpath('//td')
#this gets all rows in the table, but then gets all elements on the page, 
not just the table

Попытка 2:

driver.find_elements_by_xpath('//table//body//tr//td')
#this gets all the elements that I want, but makes no distinction to which 
 row each element belongs to

Любая помощь приветствуется

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Вы можете получить заголовки таблиц и использовать индексы для получения правильной последовательности в данных строки.

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.tennisabstract.com/cgi-bin/player-classic.cgi?p=RafaelNadal")

table_headers = [th.text.strip() for th in driver.find_elements_by_css_selector("#matchheader th")]
rows = driver.find_elements_by_css_selector("#matches tbody > tr")

date_index = table_headers.index("Date")
tournament_index = table_headers.index("Tournament")
score_index = table_headers.index("Score")

for row in rows:
    table_data = row.find_elements_by_tag_name("td")
    print(table_data[date_index].text, table_data[tournament_index].text, table_data[score_index].text)
0 голосов
/ 08 октября 2019

Это локатор каждой строки таблицы, которую вы имеете в виду XPATH: //table[@id="matches"]//tbody//tr

Первый следующий импорт:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

Каждая строка:

driver.get('http://www.tennisabstract.com/cgi-bin/player-classic.cgi?p=RafaelNadal')

rows = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, '//table[@id="matches"]//tbody//tr')))

for row in rows:
    print(row.text)

Или каждая ячейка:

for row in rows:
    cols = row.find_elements_by_tag_name('td')
    for col in cols:
        print(col.text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...