Вы можете получить все эти данные в хорошем формате json, используя .post
import requests
from pandas.io.json import json_normalize
url = 'https://1track.ru/ajax/tracking2'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}
payload = {'tracks[0][track]': 'RU341961010HK'}
data = requests.post(url, headers=headers, data=payload).json()
jsonObj = data['JSON']
# you can do whatever you'd like here. But I just threw it into a dataframe
df = json_normalize(jsonObj['data']['events']['data'])
Вывод:
фрейм данных со следующими столбцами:
['attribute', 'attribute.name', 'attribute.name_orig', 'courier.country',
'courier.country_code', 'courier.image', 'courier.name',
'courier.track', 'courier.uri', 'date', 'date_format.F',
'date_format.H', 'date_format.M', 'date_format.Y', 'date_format.d',
'date_format.i', 'date_format.m', 'date_format.s', 'days', 'daysclass',
'details', 'details.name', 'details.name_orig', 'kk', 'payment',
'place', 'place.name', 'place.name_orig', 'placeto', 'status', 'time',
'value', 'weight', 'zip', 'zip.code', 'zip.country.code',
'zip.country.name', 'zip.fullcode', 'zip.location.address',
'zip.location.lat', 'zip.location.long', 'zip.name', 'zip.type']
и фрейм данных (чтобы просто показать первые полные 3 строки:
print(df.head(3).to_string())
attribute attribute.name attribute.name_orig courier.country courier.country_code courier.image courier.name courier.track courier.uri date date_format.F date_format.H date_format.M date_format.Y date_format.d date_format.i date_format.m date_format.s days daysclass details details.name details.name_orig kk payment place place.name place.name_orig placeto status time value weight zip zip.code zip.country.code zip.country.name zip.fullcode zip.location.address zip.location.lat zip.location.long zip.name zip.type
0 NaN Передача в авиакомпании Hand over to airline Китай CN cainiao.png CAINIAO RU341961010HK cainiao 29.01.2019 January 14 Jan 2019 29 59 01 00 4 день success False NaN NaN 0 None False NaN NaN False transit 14:59:00 None 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 NaN Airline departure from original country Airline departure from original country Китай CN cainiao.png CAINIAO RU341961010HK cainiao 29.01.2019 January 13 Jan 2019 29 34 01 00 4 день success False NaN NaN 1 None False NaN NaN False transit 13:34:00 None 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 False NaN NaN Россия RU russian-post.png Почта России RU341961010HK russian-post 29.01.2019 January 10 Jan 2019 29 46 01 00 4 день success NaN Экспорт международной почты Экспорт международной почты 2 None NaN Гонконг HKHKGA Гонконг HKHKGA False transit 10:46:00 None 0 NaN HKHKGA HK Hong Kong HK_HKHKGA NaN 0.0 0.0 Гонконг HKHKGA int
Процесс получает данные:
data = requests.post(url, headers=headers, data=payload).json()
А потом я просто сохраняю JSON из него:
jsonObj = data['JSON']
Затем я могу «распаковать» данныечто мне нужно, и сохранить в качестве кадра данных:
df = json_normalize(jsonObj['data']['events']['data'])
и вот кадр данных: