我是一名新手程式員,試圖通過將 .ict 檔案自動轉換為 .csv 檔案來加速資料分析程序。
我正在嘗試創建一個 Python 程式,該程式可以輕松地將來自 NASA 地球資料網站的 .ict 檔案轉換為 .csv 檔案以進行資料分析。我計劃通過創建一個資料抓取器來訪問這些檔案來做到這一點,但它們位于用戶身份驗證墻后面。我計劃訪問的資料集可在此鏈接中找到:https : //asdc.larc.nasa.gov/data/AJAX/O3_1/2018/02/28/AJAX-O3_ALPHA_20180228_R1_F220.ict
這是我從https://curlconverter.com/#收集并添加以發送資料以“登錄”我的會話的代碼:
import requests
from bs4 import BeautifulSoup
cookies = {
'_ga': '',
'_gid': '',
'_gat_GSA_ENOR0': '1',
'_gat_UA-62340125-1': '1',
'_gat_eui_tracker': '1',
'_gat_UA-50960810-3': '1',
'_urs-gui_session': '',
'_gat_UA-62340125-2': '1',
}
headers = {
'Connection': 'keep-alive',
'Cache-Control': 'max-age=0',
'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"macOS"',
'Upgrade-Insecure-Requests': '1',
'Origin': 'https://urs.earthdata.nasa.gov',
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': '',
'Accept': 'text/html,application/xhtml xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-User': '?1',
'Sec-Fetch-Dest': 'document',
'Referer': 'https://urs.earthdata.nasa.gov/oauth/authorize?response_type=code&client_id=OLpAZlE4HqIOMr0TYqg7UQ&redirect_uri=https://d53njncz5taqi.cloudfront.net/urs_callback&state=https://search.earthdata.nasa.gov/search?ee=prod',
'Accept-Language': 'en-US,en;q=0.9',
}
data = {
'utf8': '',
'authenticity_token': '',
'username': '',
'password': '',
'client_id': '',
'redirect_uri': '',
'response_type': 'code',
'state': 'https://search.earthdata.nasa.gov/search?ee=prod',
'stay_in': '1',
'commit': 'Log in'
}
response = requests.post('https://urs.earthdata.nasa.gov/login', headers=headers, cookies=cookies, data=data)
s = requests.Session()
s.post('https://urs.earthdata.nasa.gov/login', headers=headers, cookies=cookies, data=data)
response = s.get("https://asdc.larc.nasa.gov/data/AJAX/O3_1/2018/02/28/AJAX-O3_ALPHA_20180228_R1_F220.ict")
response
result = requests.get('https://asdc.larc.nasa.gov/data/AJAX/O3_1/2018/02/28/AJAX-O3_ALPHA_20180228_R1_F220.ict')
result.status_code
result.headers
content = result.content
soup = BeautifulSoup(content, features='lxml')
print(soup.prettify())
此列印功能將我引導至登錄頁面的 HTML 代碼。有誰知道如何通過Python訪問登錄另一端的資料?
uj5u.com熱心網友回復:
您缺少一些東西data,例如 的值authenticity_token和編碼值state。以下是我將如何做。確保在執行腳本之前相應地填寫username和password欄位。
import requests
from bs4 import BeautifulSoup
url = 'https://urs.earthdata.nasa.gov/oauth/authorize?splash=false&client_id=iQGRa5KtDl_e-fgYqB5x5Q&response_type=code&redirect_uri=https://asdc.larc.nasa.gov/data/urs&state=aHR0cDovL2FzZGMubGFyYy5uYXNhLmdvdi9kYXRhL0FKQVgvTzNfMS8yMDE4LzAyLzI4L0FKQVgtTzNfQUxQSEFfMjAxODAyMjhfUjFfRjIyMC5pY3Q'
link = 'https://urs.earthdata.nasa.gov/login'
with requests.Session() as s:
s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'
r = s.get(url)
soup = BeautifulSoup(r.text,"lxml")
payload = {i['name']:i.get('value','') for i in soup.select('input[name]')}
payload['username'] = 'your_username'
payload['password'] = 'your_password'
res = s.post(link,data=payload)
print(res.text)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/389410.html
