Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有一种方法可以不使用Selenium和Web浏览器从网站下载csv数据?_Javascript_Python 3.x_Url_Automation - Fatal编程技术网

Javascript 有没有一种方法可以不使用Selenium和Web浏览器从网站下载csv数据?

Javascript 有没有一种方法可以不使用Selenium和Web浏览器从网站下载csv数据?,javascript,python-3.x,url,automation,Javascript,Python 3.x,Url,Automation,我想从特定网站(通过Python)自动化数据下载过程,但不能使用Selenium或浏览器,因为代码将安排在Selenium和浏览器选项都不可用的服务器上 我尝试了一个python代码,使用pyautogui包自动移动鼠标,然后单击下载文件,但它不起作用,因为服务器不允许打开浏览器选项(我也不能使用Selenium,这将是理想的选项) 附上以下代码: import time import webbrowser url = 'https://covid.cdc.gov/covid-data-tr

我想从特定网站(通过Python)自动化数据下载过程,但不能使用Selenium或浏览器,因为代码将安排在Selenium和浏览器选项都不可用的服务器上

我尝试了一个python代码,使用pyautogui包自动移动鼠标,然后单击下载文件,但它不起作用,因为服务器不允许打开浏览器选项(我也不能使用Selenium,这将是理想的选项)

附上以下代码:

import time

import webbrowser

url = 'https://covid.cdc.gov/covid-data-tracker/#ed-visits'

#Open URL in a new tab, if a browser window is already open*

webbrowser.open_new_tab(url)

print(pyautogui.size())

time.sleep(5)

pyautogui.moveTo(1275, 655, duration = 5)

pyautogui.click()

time.sleep(5)

pyautogui.press('down')

pyautogui.press('enter')
我想在其他方面得到一些帮助。鉴于上述限制,我如何自动下载文件,以便在服务器端运行/调度.py文件以自动完成此过程

我试图按照@Olvin Roght的答案进行操作,但找不到csv的触发函数或文件源:

同时,也要附加该部件的卡扣:


关于@epascarello的上述评论,数据似乎是通过Javascript在客户端生成的

我怎么知道的?使用Chrome的开发者控制台,我切换到“网络”选项卡,点击“下载CSV”按钮,观察它做了什么,或者更确切地说,它没有做什么。它没有向服务器请求CSV文件


这意味着Selenium/WebDriver可能是您从CDC下载此数据的唯一选项。这可能很困难,而且容易被破坏,因此我建议使用不同的数据源:纽约时报已经提供了他们的数据。

在这种情况下,我建议首先找到获取数据的API。通过快速的网络检查,我发现数据是从
https://covid.cdc.gov/covid-data-tracker/COVIDData/getAjaxData?id=ed_trend_data
。您可以在开发人员控制台的“网络”选项卡中查看所有传出请求

您可以通过向URL发送get请求来获取JSON数据,然后将JSON转换为CSV

import requests, csv

# Fetch data
data = requests.get("https://covid.cdc.gov/covid-data-tracker/COVIDData/getAjaxData?id=ed_trend_data").json()["ed_trend_data"]

with open("data.csv", "w") as file:

    # Open CSV writer
    csv_file = csv.writer(file, lineterminator='\n')
    
    # Write heading
    csv_file.writerow([ "Geography", "Date", "Syndrome", "Percent" ])
    
    # Write data to CSV
    for item in data:
        csv_file.writerow([ item["Geography"], item["Date"], item["Indicator"], item["Percent"] ])

CSV是在这个站点的客户端还是服务器端生成的?嘿@epascarello,Kryten是正确的,数据是通过javascript在客户端生成的。嘿,Drew,谢谢你的回答。这也是我最初的尝试,但在控制台的网络窗格中找不到发送GET请求的URL。这个网址工作完美!!嘿,Kryten,我确实从同一个NYT GitHub repo中提取了一些其他csv,但这些数据在那里不可用,因此我直接从这个网站中提取。谢谢你的回答。