【发布时间】:2023-02-07 11:54:38
【问题描述】:
我知道与我的问题非常相似的问题已经被问过很多次,但我几乎已经全部复习了,无法解决我自己的代码,所以我希望有人能给出答案。
我正在尝试遍历 csv 下载并将它们附加到一个调用 for 循环的用户定义函数中。我添加了打印行,以便我可以看到函数失败的地方。该函数打印 1、2、3 并返回空的数据框 df。
为什么 for 循环被跳过并且 df 返回空?当在用户设计的功能之外运行时,它可以完美运行。
提前致谢!
# LoadPackages
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
import pandas as pd
# ================================================== download spp tie flows
# set directories
directory = r"E:/Data/sophie/line vision/sources/spp public/downloaded/"
driverPath = r"/Users/sophi/Downloads/chromedriver_win32/chromedriver.exe"
# define urls
page_url = "https://marketplace.spp.org/pages/historical-tie-flow"
prefix_download_url = ("https://marketplace.spp.org/file-browser-api/download/" +
"historical-tie-flow?path=%2F")
xpath = "//*[@id='main-content']/div/div/div[2]/div/div[3]/div/ul/li/a/span[@class='fname name' and contains(text(), '2021')]"
driver = webdriver.Chrome(ChromeDriverManager().install())
def download_and_append(page_url, prefix_download_url, xpath) :
driver.get(page_url)
print(1)
# create empty dataframe to append to
df = pd.DataFrame()
print(2)
# retrieve data from page
elements = driver.find_elements(By.XPATH, xpath)
print(3)
for element in elements:
index = element.text.split()[0]
print(index)
data = pd.read_csv(prefix_download_url + index)
print(4)
# clean dataframe and concatenate to df
df = pd.concat([df, data])
print(5)
return df
hourly_tie_flows_2021 = download_and_append(page_url, prefix_download_url, xpath)
hourly_tie_flows_2021
# ========================================================== export data
hourly_tie_flows_2021.to_csv(directory + "/spp_tie_flows_by_ba_2021.csv")`
【问题讨论】:
-
您确定查询
elements = driver.find_elements(By.XPATH, xpath)确实找到了一些东西吗?尝试在循环之前打印元素以查看。您可能试图遍历一个空列表。只需在 'print(3)' 之后添加print(elements) -
是的,代码在循环外完美运行。
标签: python pandas selenium for-loop