Разбор 1track ... информация о точке - PullRequest
0 голосов
/ 31 января 2019

Я пользуюсь селеном и красивым мылом.Подождите 30 секунд, пока всплывающее окно не загрузится, не закроет его и снова не прочитает информацию.Но информация о точках, где находилась посылка, как бы скрыта.Мне посоветовали попробовать агент usser, но он тоже не помог.

import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
import time
import re
import requests

driver = 

webdriver.Chrome("C:\\Users\\Yres\\Downloads\\
chromedriver_win32\\chromedriver.exe")

driver.get('https://1track.ru/tracking/RU341961010HK')

time.sleep(30)

driver.find_element_by_class_name ("close").click()

driver.get('https://1track.ru/tracking/RU341961010HK')

source = driver.page_source
driver.quit() 

soup = BeautifulSoup(source, "html.parser")
print(soup)

1 Ответ

0 голосов
/ 31 января 2019

Вы можете получить все эти данные в хорошем формате 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()

enter image description here

А потом я просто сохраняю JSON из него:

jsonObj = data['JSON']

enter image description here

Затем я могу «распаковать» данныечто мне нужно, и сохранить в качестве кадра данных:

df = json_normalize(jsonObj['data']['events']['data'])

enter image description here

и вот кадр данных:

enter image description here

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