как можно вырезать и разобрать страницу за публикацией и нажать? - PullRequest
0 голосов
/ 27 июня 2019

Я хочу написать небольшой код на 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)

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

Ответы [ 3 ]

2 голосов
/ 27 июня 2019

Я пошел на 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
1 голос
/ 27 июня 2019

То, что предоставил @FelizNaveedad, превосходно. Проще говоря, с этой картинкой

enter image description here

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

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

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

1 голос
/ 27 июня 2019

Если вы посмотрите на веб-инспектор вашего браузера (например, 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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...