首页 > 解决方案 > ETL - 如何进入网站,输入一些参数并将文件(或网络数据)导出到数据库

问题描述

我正在寻找一些建议:

我需要进入一个网站,输入一些数据,然后导出文件以将该数据加载到数据库中。

我一直在尝试使用诸如 Octoparse 之类的 ETL 工具。我遇到的问题是,使用 ETL,我知道我无法复制网站所做的“导出到 csv”,所以我可以从显示的表格中获取信息,问题是数据在网站。这里有一个例子:

在此处输入图像描述

在“1”中,我需要从一个到日期输入问题是,在此处过滤后,表格被折叠,我必须用“2”打开

我可以选择通过单击“3”手动将文件导出为 CSV,然后将其导入数据库,但实际上它确实需要一些额外的工作。我可以使用哪种类型的 ETL 来完成此活动?主要目标是将这些数据导出到 SQL 数据库而无需人工干预。

该网站没有用于连接的 API。

标签: web-scrapingetl

解决方案


因此,由于没有 API 或其他方法可以直接获取它,您可以使用 Selenium 模拟浏览器并单击按钮。这应该让您登录,更改为所需的开始日期,过滤,然后导出。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
import time

# Enter you parameters
user = 'username@gmail.com'
pwd = 'password'
startDate = '01/03/2020'

# Open page
driver = webdriver.Chrome('C:/chromedriver_win32/chromedriver.exe') #<-- put the path to chromedriver.exe on your machine here.
driver.get('https://www.trinks.com/BackOffice/Relatorios/Financeiro')

# Input username, password and click enter
driver.find_element_by_id("fEmail").send_keys(user)
driver.find_element_by_id("fSenha").send_keys(pwd)
driver.find_element_by_css_selector('button[title="Entrar nos Trinks"]').click()


# Remove date and enter new start date and click filter
WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.ID, 'DataInicio')))
driver.find_element_by_id('DataInicio').send_keys(Keys.CONTROL + "a");
driver.find_element_by_id('DataInicio').send_keys(Keys.DELETE);    
driver.find_element_by_id("DataInicio").send_keys(startDate)
driver.find_element_by_css_selector('input[title="Filtrar"]').click()


# Click export and wait to allow it to start download
driver.find_element_by_css_selector('input[title="Exportar"]').click()
time.sleep(15)

# Close browser
driver.close()    

推荐阅读