【问题标题】:Python selenium data transfer to excel - optimal solutionPython selenium 数据传输到 excel - 最佳解决方案
【发布时间】:2022-01-13 12:53:34
【问题描述】:

我使用下面的代码将抓取的数据传输到 Excel 工作表。 它有效,但缺点是执行时间。 以这种方式传输大约 200 行 x 2 列(400 个元素)大约需要 5-10 秒。 我希望有人可以用一些更有效的解决方案提示我。

Python 代码:

driver=webdriver.Chrome(executable_path=r'C:/chromedriver.exe')     
driver.get('https://www...table')    
First = driver.find_elements_by_xpath('//table[@id="cr1"]/tbody/tr/td[1]')
Second = driver.find_elements_by_xpath('//table[@id="cr1"]/tbody/tr/td[2]')
xlapp = win32.Dispatch('Excel.Application')
wbook = xlapp.Workbooks.Open(r'Test.xlsm')
sheet = wbook.Worksheets('COMM')
for i in range(len(First)):
    sheet.Cells(i,1).Value = First[i]
    sheet.Cells(i,2).Value = Second[i] 

【问题讨论】:

  • 看看使用 pandas,我还建议写入 CSV 文件而不是 excel。仅当它是您所追求的数据而不是格式或公式时

标签: python excel pandas dataframe selenium


【解决方案1】:

一种有效的方法是scrape the data from the table 并使用DataFramepandasCSV/XLS/XLSX file 中写入数据,如下所示:

driver=webdriver.Chrome(executable_path=r'C:/chromedriver.exe')     
driver.get('https://www...table')    
First = [my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, '//table[@id="cr1"]/tbody/tr/td[1]')))]
Second = [my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, '//table[@id="cr1"]/tbody/tr/td[2]')))]
df = pd.DataFrame(data=list(zip(First, Second)), columns=['First', 'Second'])
print(df)
df.to_excel(r'C:\Data_Files\output_files\Test.xlsx', index=False)
driver.quit()

【讨论】:

  • 非常感谢您的回复。正如我所见,对于具有大约 200 个值的列的单个执行时间: First = [my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, '//table[@id ="cr1"]/tbody/tr/td[1]')))] 大约是 3-4 秒,所以我最终会得到类似的总执行时间。如果我没看错的话,从 webelement 中提取文本似乎非常耗时。还是我错了?
  • @Tom 不看 HTML 和你的框架/代码,谈论性能是不合理的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-12
  • 2010-09-28
  • 1970-01-01
  • 2010-09-10
  • 2023-03-13
  • 2014-09-18
  • 1970-01-01
相关资源
最近更新 更多