我正在尝试从公共来源下载多个数据集,欧盟交易日志。
我正在使用“分配/合规性”搜索工具(在左侧蓝色窗格中)。
从那里我必须选择一个国家并点击“搜索”。然后我可以访问各个年份(2010、2011、2012 等)。我想下载所有国家(28 个)和所有前几年(从 2005 年到 2013 年)的文件,这意味着至少有 252 个请求。
我试图弄清楚如何直接使用下载 URL。最终 URL(在本例中为 2010 年保加利亚的 URL)是下列。
通过此 URL,我可以:
- 删除“&installationAllowance=35266538”参数
- 删除“®istryCodeLookup=Bulgaria”参数
- 更改“&periodYear=2010”参数(更改参考日期)
- 更改“®istryCode=BG”参数(以更改国家/地区)。
到目前为止我唯一的问题是每个链接都需要从下载页面进行验证(单击“确定”按钮)。
在页面的源代码中,我看到触发的函数如下:
<form name="export" method="POST" action="http://ec.europa.eu/environment/ets/export.do">
“确定”按钮代码如下:
<input type="submit" name="OK" value="Ok" class="FormButton" id="btnOK">
页面源代码中还有一个 JavaScript 块。
我如何批量下载这些文件?(我正在考虑创建一堆链接,用 RegEx 替换年份和国家,然后使用 Firefox 的“DownThemAll”扩展,并选择“从文件下载”)。
答案1
我肯定会考虑使用python 与模块调用硒。
您可以轻松地自动执行任何浏览器操作(甚至可以无头地使用幻影JS)。
最简单的例子:
driver = webdriver.Firefox()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.close()
上面的代码将打开 python.org 网页,找到元素q
,输入“pycon”,按回车键并检查是否返回任何结果。
您可以定义一些想要执行的动作链:
actions = ActionChains(driver)
actions.move_to_element(menu)
actions.click(hidden_submenu)
actions.perform()
当然,您可以找到必须点击的“确定”按钮:
button_ok = driver.find_element_by_id('button')
并点击它:
button_ok.click()
Xpath 也可以用来搜索给定的元素:/html/body/button
。
如果你对此解决方案感兴趣,请考虑查看文档它写得非常好,肯定能让你立即创建最终的解决方案。