首页 > 解决方案 > PhantomJS 脚本从下拉菜单中选择,填充单元格,点击下载按钮并保存结果文件

问题描述

我正在尝试为我的研究自动收集一些数据:其中一部分来自该网站,该网站最近已转换为响应式格式——数据无法从精确的 URL 访问,而是作为页面中选择选项的输出。

现在,我想写一段 JavaScript 代码来选择数据切割并让 PhantomJS 在页面上运行它。我的问题是我对 JavaScript 完全陌生,而这篇文章可能是我唯一会使用 JS 的东西,因此我不知道从哪里开始。

我想让脚本进入网页,从下拉菜单中选择一个项目,选择四个选项之一,在单元格中填写某个年份,最后点击“下载 csv”按钮保存文件。如果有人可以为我提供代码片段或注释脚本,这将节省我一周的工作时间!

提前致谢!

标签: javascriptweb-scrapingphantomjs

解决方案


您可以使用 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]

推荐阅读