PhantomJS脚本从下拉菜单中选择,填充单元格,单击下载按钮并保存生成的文件

问题描述 投票:0回答:1

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

现在,我想写下一个JavaScript代码来选择数据剪切并让PhantomJS在页面上运行它。我的问题是我对JavaScript完全陌生,而这可能是我将使用JS的唯一内容,因此我不知道从哪里开始。

我希望脚本转到网页,从下拉菜单中选择一个项目,选择四个选项之一,在单元格中填入特定年份,最后点击“ download csv”按钮以保存文件。如果有人可以提供一些代码段供我整理,或者提供注释的脚本可以节省我好一周的工作!

提前感谢!

javascript web-scraping phantomjs
1个回答
0
投票
您可以使用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]
© www.soinside.com 2019 - 2024. All rights reserved.