Как я могу открыть URL-адреса из файла CSV с помощью селена? - PullRequest
1 голос
/ 18 июня 2020

Я пытаюсь сохранить данные из профиля в Google Scholar в CSV. В профиле есть кнопка «Показать больше», и я могу получить от нее все данные (здесь я сохранил только данные из таблицы, но мне нужны все данные из профиля), но проблема в том, что я сохранил данные дважды или иногда даже больше, и я думаю, это потому, что я сохранил его, когда щелкал, а не после того, как я щелкнул все «Показать больше», так как я могу это сделать? Кроме того, здесь я использовал только один URL-адрес, но их больше, и я сохранил их в другом CSV, так как мне открыть каждый URL-адрес оттуда, чтобы делать то, что я здесь делаю? (Мне нужна только строка Link) CSV с URL-адресами выглядит так https://drive.google.com/file/d/1zkTlzYaOQ7FVoSdd5OMnE8QgwS8NOik7/view?usp=sharing

from selenium.webdriver.support.ui import WebDriverWait as W
from selenium.webdriver.support import expected_conditions as EC
from selenium.common import exceptions as SE
from selenium import webdriver
import time
from csv import writer

chrome_path=r"C:\Users\gvste\Desktop\proyecto\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)

urls = ["https://scholar.google.com/citations?hl=en&user=gQb_tFMAAAAJ"]

button_locators = "//button[@class='gs_btnPD gs_in_ib gs_btn_flat gs_btn_lrge gs_btn_lsu']"
wait_time = 2

wait = W(driver, wait_time)

for url in urls:
    data = {}
    driver.get(url)

    button_link = wait.until(EC.element_to_be_clickable((By.XPATH, button_locators)))

    while button_link:
        try:
            wait.until(EC.visibility_of_element_located((By.ID,'gsc_a_tw')))
            data = driver.find_elements_by_class_name("gsc_a_tr")



            button_link = wait.until(EC.element_to_be_clickable((By.XPATH, button_locators)))
            button_link.click()
            time.sleep(2)

            with open('perfil.csv','a', encoding="utf-8", newline='') as s:
                 csv_writer =writer(s)
                 for i in range(len(data)):
                     paper = driver.find_elements_by_class_name("gsc_a_t")
                     citas = driver.find_elements_by_class_name("gsc_a_c")
                     año = driver.find_elements_by_class_name("gsc_a_y")  
                     p = paper[i].text.replace(',', '')
                     c = citas[i].text.replace(',', '')
                     a = año[i].text.replace(',', '')            
                     csv_writer.writerow([ p, c, a])

        except SE.TimeoutException:
            print(f'Página parseada {url}')
            break

driver.quit()

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

Вот самый простой c способ чтения данных из файла CSV:

import csv
with open('filename.csv', 'r') as file:
reader = csv.reader(filename)
for row in reader:
    print(row)
0 голосов
/ 20 июня 2020

По первой части я толком не понял, что происходит. Но для второй части вы можете изменить URL-адреса с жесткого кода на функцию (поместите l oop в функцию), и вы можете использовать библиотеку pandas для CSV (это намного лучше). Это для получения URL-адресов

import pandas as pd
df = pd.read_csv(csv_file)
urls = df['column_name'] 
...