Как распечатать Xpath для Gsheets, используя Python Selenium Pandas? - PullRequest
0 голосов
/ 20 октября 2019

Итак, ранее у меня были некоторые проблемы с записью желаемой информации из списка в csv. Я получил некоторую помощь в SO и сумел сделать то, что хотел, учитывая следующий код:

import csv
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
from webdriver_manager.chrome import ChromeDriverManager

# open target
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get('https://www.exampleurl.com/facts')

# define xpath
def get_elements_by_xpath(driver, xpath):
    return [entry.text for entry in driver.find_elements_by_xpath(xpath)]

# Xpaths
text_entries = [
    ("Fact 1", "//div[@class='fact' and contains(span, '')][1]"),
    ("Fact 2", "//div[@class='fact' and contains(span, '')][2]"),
    ]

# Print facts to csv
with open('facts.csv', 'a') as f:
    csv_output = csv.writer(f)
    entries = []
    for name, xpath in text_entries:
        entries.append(get_elements_by_xpath(driver, xpath))
    csv_output.writerows(zip(*entries))

Но теперь я хотел бы использовать тот же код, но распечатать его в Gsheets. Я попытался решить ее, используя Pandas со следующим кодом (ниже):

import pygsheets
import pandas as pd
import csv
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
from webdriver_manager.chrome import ChromeDriverManager

# Open target
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get('https://www.exampleurl.com/facts')

# Define xpath
def get_elements_by_xpath(driver, xpath):
    return [entry.text for entry in driver.find_elements_by_xpath(xpath)]

# Xpaths
text_entries = [
    ("Fact 1", "//div[@class='fact' and contains(span, '')][1]"),
    ("Fact 2", "//div[@class='fact' and contains(span, '')][2]"),
    ]

# Print facts to Gsheets
gc = pygsheets.authorize(service_file='/users/Username/desktop/map/filekey.json')
df = pd.DataFrame(entries)
sh = gc.open('apts')
wks = sh[0]
wks.set_dataframe(entries,(1,1))

Код выводит один факт для одного div (хотя есть два факта и сотни div, использующих один и тот же класс). Печать его в CSV дает мне ВСЕ факты, напечатанные соответствующим образом и правильные. Он также перезаписывает файл каждый раз, когда я делаю очистку вместо добавления новых строк в таблицу ...

Любая помощь или мысли будут оценены!

...