javascript - PhantomJS 脚本从下拉菜单中选择,填充单元格,点击下载按钮并保存结果文件
问题描述
我正在尝试为我的研究自动收集一些数据:其中一部分来自该网站,该网站最近已转换为响应式格式——数据无法从精确的 URL 访问,而是作为页面中选择选项的输出。
现在,我想写一段 JavaScript 代码来选择数据切割并让 PhantomJS 在页面上运行它。我的问题是我对 JavaScript 完全陌生,而这篇文章可能是我唯一会使用 JS 的东西,因此我不知道从哪里开始。
我想让脚本进入网页,从下拉菜单中选择一个项目,选择四个选项之一,在单元格中填写某个年份,最后点击“下载 csv”按钮保存文件。如果有人可以为我提供代码片段或注释脚本,这将节省我一周的工作时间!
提前致谢!
解决方案
您可以使用 Selenium 来模拟它。更好的方法是通过使用请求直接访问数据源,然后迭代不同的参数。然而,这是使用 python 的请求。
因此,要按升序获取表 5,2010 年,每月:
payload = {
'table': '5',
'year': '2010',
'qorm': 'M',
'order': 'asc',
'format': 'View Below'}
完整的代码是这样的:
import requests
import pandas as pd
url = 'https://data.sca.isr.umich.edu/data-archive/mine.php'
headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Mobile Safari/537.36'}
period = {'Monthly': 'M', 'Quarterly': 'Q', 'Annual': 'Y'}
payload = {
'table': '5',
'year': '2010',
'qorm': period['Monthly'],
'order': 'asc',
'format': 'View Below'}
response = requests.post(url, headers=headers, data=payload)
table = pd.read_html(response.text)[-1]
table.columns = table.loc[0]
table = table.loc[1:]
table.to_csv('file.csv', index=False)
输出:
print (table)
0 Month Year ... Current Index Expected Index
1 1 2010 ... 81.1 70.1
2 2 2010 ... 81.8 68.4
3 3 2010 ... 82.4 67.9
4 4 2010 ... 81 66.5
5 5 2010 ... 81 68.8
6 6 2010 ... 85.6 69.8
7 7 2010 ... 76.5 62.3
8 8 2010 ... 78.3 62.9
9 9 2010 ... 79.6 60.9
10 10 2010 ... 76.6 61.9
11 11 2010 ... 82.1 64.8
12 12 2010 ... 85.3 67.5
13 1 2011 ... 81.8 69.3
14 2 2011 ... 86.9 71.6
15 3 2011 ... 82.5 57.9
16 4 2011 ... 82.5 61.6
17 5 2011 ... 81.9 69.5
18 6 2011 ... 82 64.7
19 7 2011 ... 75.7 55.9
20 8 2011 ... 68.5 47.6
21 9 2011 ... 75.2 49.4
22 10 2011 ... 74.9 51.7
23 11 2011 ... 77.4 54.9
24 12 2011 ... 79.6 63.6
25 1 2012 ... 84.2 69.1
26 2 2012 ... 83 70.3
27 3 2012 ... 86 69.8
28 4 2012 ... 82.9 72.3
29 5 2012 ... 87.2 74.3
30 6 2012 ... 81.5 67.8
.. ... ... ... ... ...
88 4 2017 ... 112.7 87
89 5 2017 ... 111.7 87.7
90 6 2017 ... 112.4 83.8
91 7 2017 ... 113.4 80.5
92 8 2017 ... 110.9 87.7
93 9 2017 ... 111.7 84.4
94 10 2017 ... 116.5 90.5
95 11 2017 ... 113.5 88.9
96 12 2017 ... 113.8 84.3
97 1 2018 ... 110.5 86.3
98 2 2018 ... 114.9 90
99 3 2018 ... 121.2 88.8
100 4 2018 ... 114.9 88.4
101 5 2018 ... 111.8 89.1
102 6 2018 ... 116.5 86.3
103 7 2018 ... 114.4 87.3
104 8 2018 ... 110.3 87.1
105 9 2018 ... 115.2 90.5
106 10 2018 ... 113.1 89.3
107 11 2018 ... 112.3 88.1
108 12 2018 ... 116.1 87
109 1 2019 ... 108.8 79.9
110 2 2019 ... 108.5 84.4
111 3 2019 ... 113.3 88.8
112 4 2019 ... 112.3 87.4
113 5 2019 ... 110 93.5
114 6 2019 ... 111.9 89.3
115 7 2019 ... 110.7 90.5
116 8 2019 ... 105.3 79.9
117 9 2019 ... 108.5 83.4
[117 rows x 9 columns]
推荐阅读
- ssh - 我可以将 SSH 会话从编程语言传递到系统终端吗?
- xcode - 我们能否在新的 macOS Catalina 10.15 beta 中同时使用 Xcode 10.2.1 和 Xcode 11 beta
- node.js - 如何避免在 package.json 中写入长路径名
- javascript - HTML页面中的JavaScript代码运行顺序
- python-2.7 - “FilterExpression”对象没有属性“值”
- unity3d - OnMouseEnter / Exit 重复而不是仅一次
- php - 如何更改我的代码以将我的第二张照片包含在我的轮播中?
- angular - formBuilder.group({}) 中的调用函数
- windows - OpenH264 解码与网络延迟导致失败
- javascript - 如何获取被点击事件的具体日期