Скрипт PhantomJS для выбора из выпадающего меню, заполнения ячейки, нажатия кнопки загрузки и сохранения полученного файла - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь автоматизировать сбор данных для своего исследования: одна часть этого взята с этого веб-сайта , который недавно перешел на адаптивный формат - данные не доступны с точного URL, но приходяткак результат выбора опций на странице.

Теперь я подумал написать код JavaScript, чтобы выбрать вырезку данных и запустить PhantomJS на странице. Моя проблема в том, что я совершенно новичок в JavaScript, и эта часть, вероятно, единственная вещь, для которой я буду когда-либо использовать JS, поэтому я не знаю, с чего начать.

Мне бы хотелось, чтобы скрипт перешел на веб-страницу, выберите элемент в раскрывающемся меню, выберите один из четырех параметров, заполните ячейку определенным годом и, наконец, нажмите кнопку «Загрузить CSV», чтобысохраните файлЕсли бы кто-нибудь мог предоставить мне фрагменты кода для написания или закомментированный сценарий, который сэкономил бы мне хорошую неделю работы!

Заранее спасибо!

1 Ответ

0 голосов
/ 28 октября 2019

Вы можете использовать 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]
...