1

我正在尝试将 Google Scholar 上的个人资料中的数据保存到 CSV 中。配置文件有一个“显示更多”按钮,我可以从中获取所有数据(这里我只保存了表中的数据,但我需要配置文件中的所有数据)但问题是我保存了两次数据或有时甚至更多次,我认为这是因为我在点击时保存了它,而不是在我点击了所有“显示更多”之后,所以我该怎么做呢?另外,这里我只使用了一个 URL,但还有更多,并且我将它们保存在另一个 CSV 中,那么如何从那里打开每个 URL 来执行我在这里所做的事情?(我只需要链接行)带有 URL 的 CSV 看起来像这样 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()

4

2 回答 2

0

这是从 CSV 文件中读取数据的最基本方法:

import csv
with open('filename.csv', 'r') as file:
reader = csv.reader(filename)
for row in reader:
    print(row)
于 2020-06-21T11:36:33.360 回答
0

对于第一部分,我并没有真正了解发生了什么。但是对于第二部分,您可以将 URL 从硬代码更改为函数(将循环放入函数中),并且可以将 pandas 库用于 CSV(更好)。这是为了获取 URLS

import pandas as pd
df = pd.read_csv(csv_file)
urls = df['column_name'] 
于 2020-06-20T16:17:35.933 回答