Помещение извлеченных из Интернета таблиц в Excel (селен, python) - PullRequest
1 голос
/ 03 августа 2020

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

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

driver = webdriver.Chrome("drivers/chromedriver")
driver.get("https://web3.ncaa.org/hsportal/exec/hsAction")
Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "state")))).select_by_visible_text("New Hampshire")
driver.find_element_by_xpath("//input[@id='city']").send_keys("Moultonborough")
driver.find_element_by_xpath("//input[@id='name']").send_keys("Moultonborough Academy")
driver.find_element_by_xpath("//input[@value='Search']").click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@name='hsCode']"))).click()
print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//table[@id='approvedCourseTable_1']//th[@class='header']")))])

table = ([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "table#approvedCourseTable_1.tablesorter")))])

with open('out.csv', 'w', newline='') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(table)



по какой-то причине очистка таблицы для достижения превосходства при использовании таблицы # authorizedCourseTable_1.tablesorter показывает только «Курс» и все. когда я разделяю заголовки и содержимое таблицы, я могу очистить их, чтобы добиться превосходства по отдельности, но не вместе. кроме того, содержимое таблицы не выстраивается должным образом, когда мне удается очистить его до Excel.

x = ([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "table#approvedCourseTable_1 th.header")))])
y = ([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "table#approvedCourseTable_1 td")))])

Я бы хотел, чтобы оно отображалось так, если возможно: введите описание изображения здесь

1 Ответ

2 голосов
/ 04 августа 2020

У меня это работает с использованием Selenium / Python. Попробуйте приведенный ниже пример кода:

from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import csv
csvFile = open('out.csv', 'w')
writer = csv.writer(csvFile)


driver = webdriver.Chrome("drivers/chromedriver")
driver.get("https://web3.ncaa.org/hsportal/exec/hsAction")
Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "state")))).select_by_visible_text("New Hampshire")
driver.find_element_by_xpath("//input[@id='city']").send_keys("Moultonborough")
driver.find_element_by_xpath("//input[@id='name']").send_keys("Moultonborough Academy")
driver.find_element_by_xpath("//input[@value='Search']").click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@name='hsCode']"))).click()
print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//table[@id='approvedCourseTable_1']//th[@class='header']")))])

#table = ([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "table#approvedCourseTable_1.tablesorter")))])

table_header = driver.find_element_by_xpath("(//table[@id='NcaaCrs_ApprovedCategory_All']//td[@class='hs_tableHeader'])[1]")
print(table_header.text)
writer.writerow(table_header.text)

#Find All Approved Categories
approved_Categories = driver.find_elements_by_xpath("//div[contains(@id,'NcaaCrs_ApprovedCategory_')]")

for i in range(len(approved_Categories)):
    cateogry_header = driver.find_element_by_xpath("//div[contains(@id,'NcaaCrs_ApprovedCategory_"+str(i+1)+"')]//td[@class='hs_tableHeader']")
    print(cateogry_header.text)
    writer.writerow(cateogry_header.text)
    #Find Course table header and rows
    course_headers = driver.find_elements_by_xpath("//table[contains(@id,'approvedCourseTable_"+str(i+1)+"')]/thead//th")
    header_val = []
    for headers in course_headers:
        header_val.append(headers.text)
    print(header_val)
    writer.writerow(header_val)
    course_rows = driver.find_elements_by_xpath("//table[@id='approvedCourseTable_"+str(i+1)+"']//tbody/tr")
    for j in range(len(course_rows)):
        row_values = driver.find_elements_by_xpath("//table[@id='approvedCourseTable_"+str(i+1)+"']//tbody/tr["+str(j+1)+"]/td")
        row_val = []
        for row in row_values:
            row_val.append(row.text)
        print(row_val)
        writer.writerow(row_val)


csvFile.close()
driver.quit()

Вывод CSV будет примерно таким:

['Course\nWeight', 'Title', 'Notes', 'Max\nCredits', 'OK\nThrough', 'Disability\nCourse']
Approved Courses
English
['Course\nWeight', 'Title', 'Notes', 'Max\nCredits', 'OK\nThrough', 'Disability\nCourse']
['', 'AFRICAN LITERATURE', '', '', '', 'No']
['', 'AMERICAN LITERATURE', '', '', '', 'No']
['', 'AP ENGLISH LANGUAGE & COMPOSITION', '', '', '', 'No']
['', 'AP ENGLISH LITERATURE & COMPOSITION', '', '', '', 'No']
['', 'COLLEGE COMPOSITION', '', '', '', 'No']
['', 'ENGLISH 9 (ENG 091/092/093)', '', '', '', 'No']
['', 'ENGLISH 9/H', '', '', '', 'No']
['', 'PUBLIC SPEAKING', '', '', '', 'No']
['', 'WORLD STUDIES', '', '', '', 'No']
['', 'WORLD STUDIES HBC', '', '', '', 'No']
Social Science
['Course\nWeight', 'Title', 'Notes', 'Max\nCredits', 'OK\nThrough', 'Disability\nCourse']
['', 'AP WORLD HISTORY', '', '', '', 'No']
['', 'ECONOMICS', '', '', '', 'No']
['', 'GOVERNMENT', '', '', '', 'No']
['', 'PSYCHOLOGY', '', '', '', 'No']
['', 'US HISTORY', '', '', '', 'No']
['', 'US HISTORY/AP', '', '', '', 'No']
['', 'WORLD STUDIES', '', '', '', 'No']
['', 'WORLD STUDIES HBC', '', '', '', 'No']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...