Python, Selenium. Цикл для парсинга таблицы в csv

Рейтинг: 0Ответов: 0Опубликовано: 30.05.2023

Хочу сделать так, чтобы в .csv спарсились все данные таблицы. До момента "#ЦИКЛ ДЛЯ ПАРСИНГА КАЖДОЙ СТРОКИ" Всё работает, выводятся нужные строки из таблицы в консольку, все работает. Но как бы только я не писал цикл, никак не получается моя задумка записи каждой строки(( Смог сделать только так, что только первая строка уходит в .csv, (но в код не добавлял) Помогите пожалуйста с циклом, введите сюда описание изображения программа больше часа не может завершить процесс введите сюда описание изображения P.S. ПОСЛЕ ДОБАВКИ print(r)

    while(1):
        try:
            method = driver.find_element(By.XPATH, "//*[@id='restab']/tbody/tr["+str(i)+"]/td[1]").text
            Desc = driver.find_element(By.XPATH, "//*[@id='restab']/tbody/tr["+str(i)+"]/td[2]").text
            Table_dict = {
            'Method': method,
            'Description': Desc}
            templist.append(Table_dict)
            df = pd.DataFrame(templist)
            r+=1
            print(r)
            
        except NoSuchElementException:
            break

КОД

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common import keys
from selenium.webdriver.support.select import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
import time
from tkinter import*
from tkinter import*
from tkinter import Frame, Tk, BOTH, Text, Menu, END
from tkinter import filedialog
import csv
import pandas as pd
from docx import Document
from random import choice
from docxtpl import DocxTemplate
from tkcalendar import DateEntry
import datetime
url = 'https://elibrary.ru/'
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
binary_yandex_driver_file = 'yandexdriver.exe' # path to YandexDriver
driver = webdriver.Chrome(binary_yandex_driver_file, options=options)
driver.get(url)

wait = WebDriverWait(driver, 10)
original_window = driver.current_window_handle
assert len(driver.window_handles) == 1



try:
    xpath = '/html/body/table/tbody/tr/td/table[1]/tbody/tr/td[1]/table/tbody/tr[2]/td/div/div/table[2]/tbody/tr/td[2]/a'
    elem = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath)))
    elem.click()

    xpath2 = '/html/body/table/tbody/tr/td/table/tbody/tr/td[2]/table/tbody/tr/td/table[6]/tbody/tr[1]/td[3]/a'
    elem2 = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath2)))
    elem2.click()

    wait.until(EC.number_of_windows_to_be(2))

    for window_handle in driver.window_handles:
        if window_handle != original_window:
            driver.switch_to.window(window_handle)
            break

    form_xpath = '/html/body/center/form/table[1]/tbody/tr/td[1]/input'
    elem3 = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, form_xpath)))
    print(elem3)
    elem3.send_keys('Кромина Л А')
    
    xpath4 = '/html/body/center/form/table[1]/tbody/tr/td[2]/table/tbody/tr/td[1]/a'
    elem4 = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath4)))
    elem4.click()
    time.sleep(4)
    
    driver.switch_to.window(original_window)
    

    select_element = driver.find_element(By.NAME, 'begin_year')
    select = Select(select_element)
    option_list = select.options
    select.select_by_value('2021')
    
    select_element = driver.find_element(By.NAME, 'end_year')
    select = Select(select_element)
    option_list = select.options
    select.select_by_value('2024')
    time.sleep(4)
    
    
    xpath5 = '/html/body/table/tbody/tr/td/table/tbody/tr/td[2]/table/tbody/tr/td/table[11]/tbody/tr/td[6]/a' #поиск
    elem5 = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath5)))
    elem5.click()
    
    l = driver.find_elements_by_xpath ('//*[@id="restab"]/tbody/tr') 
# получаем количество строк 
    print(len(l))  
    lc = len(l)
    #for z in l : 
    # выводим содержимое заголовка 
        #print(z.text)
    s = driver.find_elements_by_xpath('//*[@id="restab"]/tbody/tr[1]/td[2]')
    print(len(s))
     
    sc = len(s)
    for i in s : 
    # выводим содержимое заголовка 
        print(i.text) 
    for i in range(2, lc + 1):
# в цикле перебираем список столбцов из текущей строки 
        for j in range(1, sc + 1):
# получаем содержимое ячейки с помощью метода text
            d = driver.find_element_by_xpath("//*[@id='restab']/tbody/tr["+str(i)+"]/td[1]").text
            d1 = driver.find_element_by_xpath("//*[@id='restab']/tbody/tr["+str(i)+"]/td[2]").text
           
            print(d)
            
            #ЦИКЛ ДЛЯ ПАРСИНГА КАЖДОЙ СТРОКИ
            r = 1
            templist = []
            while(1):
                try:
                    method = driver.find_element(By.XPATH, "//*[@id='restab']/tbody/tr["+str(i)+"]/td[1]").text
                    Desc = driver.find_element(By.XPATH, "//*[@id='restab']/tbody/tr["+str(i)+"]/td[2]").text
                    Table_dict = {
                    'Method': method,
                    'Description': Desc}
                    templist.append(Table_dict)
                    df = pd.DataFrame(templist)
                    r+=1
                    
                except NoSuchElementException:
                    break
            df.to_csv('table.csv')
            
    
    #root=Tk()
    #root.title('Личнаякарточка')
    #root.geometry('1298x960')
    #root["bg"] = "white"
    #label1=Label(text=d, font='TimesNewRoman 11', bg="white")
    #label1.grid(row=0,column=0, sticky=S)
    #doc = DocxTemplate("шаблон.docx")
    #context = { 'номер1' : d, 'номер2' : d}
    #doc.render(context)
    #doc.save("шаблон-final.docx")
    #root.mainloop()
    

      

            



    
finally:
    driver.quit()

Ответы

Ответов пока нет.