У меня есть веб-страница, на которой мне нужно собрать все данные из таблицы, встроенной со страницы 1 до последней страницы, используя Python с селеном.
Вот веб-сайт: https://www.ageofempires.com/mods
Мне нужна помощь при создании кода go на следующей странице, пока она не достигнет последней. Проблема заключается в том, что вместо кнопок навигации, таких как «Далее» или «Предыдущая», эта веб-страница имеет нумерованные индексы в качестве кнопок для навигации. Поэтому трудно применить элементы HTML в логи c.
Кроме того, как сохранить данные с каждой страницы в один и тот же файл .CSV? Почему заголовок столбца не сохраняется в моем csv?
Ниже приведен мой тестовый код:
Тест навигации по странице:
import selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver import ActionChains
from selenium.common.exceptions import TimeoutException
import time
import csv
from datetime import datetime
from selenium.common.exceptions import WebDriverException
# Use driver to locate information
driver = webdriver.Edge(executable_path = "C://Windows//SysWOW64//MicrosoftWebDriver.exe")
driver.maximize_window()
# Using Edge to open the website
driver.get("https://www.ageofempires.com/mods")
driver.implicitly_wait(10)
while True:
try:
driver.execute_script("return arguments[0].scrollIntoView(true);", WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//li[@class='pagination']/a"))))
driver.find_element_by_xpath("//li[@class='pagination']/a").click()
print("Navigating to Next Page")
except (TimeoutException, WebDriverException) as e:
print("Last page reached")
break
driver.quit()
Открытие CSV и сохранение данные:
table = driver.find_element_by_css_selector('#mods-listing > table')
filename = datetime.now().strftime('C:/Users/username/Desktop/Output/ModsAll_%Y%m%d_%H%M.csv')
with open(filename, 'w', newline='') as csvfile:
wr = csv.writer(csvfile)
for row in table.find_elements_by_css_selector('tr'):
wr.writerow([d.text for d in row.find_elements_by_css_selector('td')])