Я хочу написать небольшой код на python, чтобы ежедневно проверять свои посылки. При выполнении запроса на веб-странице ( https://www.internationalparceltracking.com/#/search) URL не меняется, поэтому отправить запрос по URL невозможно. Я пытался использовать Beautifulsoup и urllib, но не смог получить отдачу.

Вот что я пробовал:

import requests
from bs4 import BeautifulSoup

url = 'https://www.internationalparceltracking.com/#/search'
html = urlopen(url).read()
soup = BeautifulSoup(html, "html.parser")

r = requests.post(url=url, data={'placeholder':'3SABC1234567890'})
print(r.text)

Наконец, я не хочу использовать селен (например, открытие дополнительного браузера). Я хочу, запрос сделан в подполье ... Я жду вашего совета

0
msklc 27 Июн 2019 в 11:08

3 ответа

Лучший ответ

Я пошел на URL, который вы разместили. Я заполнил некоторые фиктивные данные в форме, открыл консоль разработчика Chrome -> вкладка «Сеть» и смог определить исходящий GET-запрос:

curl 'https://www.internationalparceltracking.com/api/shipment?barcode=OEIOEWJOE4WO4UOI4O43U34&checkIfValid=true&country=US&language=en&postalCode=94107' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: en-US,en;q=0.9' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36' -H 'Accept: application/json, text/plain, */*' -H 'Referer: https://www.internationalparceltracking.com/' -H 'Cookie: ROUTEID=route.2; TIN-Language=en; Ely_vID=vk51m7caca6fj45lhcauwgj67rg1cvsj' -H 'Connection: keep-alive' --compressed

Учитывая это, я думаю, что следующий код подойдет (не нужно очищать):

import requests

payload = {
  'barcode': '3SABC1234567890',
  'country': 'US',
  'postalCode': 11111,
  'language': 'en',
  'checkIfValid': True
}

url = 'https://www.internationalparceltracking.com/api/shipment'
r = requests.get(url, params=payload)

print r.contents
2
FelizNaveedad 27 Июн 2019 в 08:18

Если вы посмотрите на веб-инспектор вашего браузера (например, Ctrl + shift + i на Chromium), вы увидите, что веб-страница выполняет простой ajax-запрос к странице, подобной этой:

https://www.internationalparceltracking.com/api/shipment?barcode=3SABC1234567890&checkIfValid=true&country=BS&language=en

Теперь просто замените значения аргументов ключевых слов на ваши собственные и вуаля!

url = "https://www.internationalparceltracking.com/api/shipment?barcode={code}&checkIfValid=true&country={country}&language=en"
import requests

my_code = '12345'
my_country = 'US'
response = requests.get(url.format(code=my_code,country=my_country)
print(response.json())
1
Granitosaurus 27 Июн 2019 в 08:19

То, что предоставил @FelizNaveedad, превосходно. Просто, чтобы выразить это более четко с этой картиной

enter image description here

Вы можете пойти по этому пути Консоль разработчика Chrome -> вкладка «Сеть» -> XHR. и разместите информацию вручную на веб-странице, и тогда вы увидите некоторые файлы, раскрытые в XHR. То, что вы ищете, это файлы, начинающиеся с отправки ....

Нажмите на этот файл, и вы найдете Query String Parameters. Это то, что вы публикуете в браузере и копируете их в свой код в качестве параметров.

Если вы хотите узнать это более конкретно, вы можете посмотреть это видео, Я считаю это полезным.

1
Tianmin Lyu 27 Июн 2019 в 09:46