Данные отсутствуют по запросу Python (запрос AJAX) - PullRequest
1 голос
/ 26 апреля 2019

Я пытаюсь собрать исторические данные о погоде с этого сайта: http://www.hko.gov.hk/cis/dailyExtract_uc.htm?y=2016&m=1

После некоторого прочтения вызова AJAX я нашел правильный способ запроса данных с помощью следующего кода:

import requests
from bs4 import BeautifulSoup
import json
import pandas as pd

headers = {
'Accept': 'text/plain, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'en-US,en;q=0.9',
'Connection': 'keep-alive',
'Host': 'www.hko.gov.hk',
'Referer': 'http://www.hko.gov.hk/cis/dailyExtract_e.htm?y=2016&m=3',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}

with requests.Session() as s:
#request April 2015 weather data
    r = s.get(r"http://www.hko.gov.hk/cis/dailyExtract/dailyExtract_201504.xml",verify = False, headers = headers)
    soup = BeautifulSoup(r.content,'lxml')
data = json.loads(soup.get_text())['stn']['data'][0]['dayData'][:-2]
df = pd.DataFrame(data)

Я заметил, что полученные данные не содержат 3 столбца справа, что я пропустил в запросе на получение?

Ответы [ 3 ]

2 голосов
/ 26 апреля 2019

Кажется, если вы запрашиваете весь год, тогда извлеките месяц, в котором он находится

import requests
import json

with requests.Session() as s:
    r = s.get(r"http://www.hko.gov.hk/cis/dailyExtract/dailyExtract_2015.xml",headers = {'User-Agent': 'Mozilla/5.0'}).json()
    print(r['stn']['data'][3]['dayData'][0])
0 голосов
/ 26 апреля 2019

исправить запрос URL.Измените:

http://www.hko.gov.hk/cis/dailyExtract/dailyExtract_201504.xml

на

http://www.hko.gov.hk/cis/dailyExtract/dailyExtract_2015.xml

, после чего вы можете получить 4-й элемент (или другой определенный месяц) в списке data['stn']['data']

import requests
from bs4 import BeautifulSoup
import json
import pandas as pd

headers = {
'Accept': 'text/plain, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'en-US,en;q=0.9',
'Connection': 'keep-alive',
'Host': 'www.hko.gov.hk',
'Referer': 'http://www.hko.gov.hk/cis/dailyExtract_e.htm?y=2016&m=3',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}

with requests.Session() as s:
#request April 2015 weather data
    data = s.get(r"http://www.hko.gov.hk/cis/dailyExtract/dailyExtract_2015.xml",verify = False, headers = headers).json()
    df = pd.DataFrame(data['stn']['data'][3]['dayData'])
0 голосов
/ 26 апреля 2019

Извините, ребята, я решил проблему, и это глупый вопрос .... Оказывается, старые данные имеют другой источник, чем последние, и я запутался в формате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...