URL-адрес POST-запроса не работает при непосредственном использовании - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь отказаться от сеансов кинотеатров. Когда я наблюдаю POST-запросы, которые использует сайт для получения сеансов (https://www.majorcineplex.com/booking2/search_showtime/cinema=1),, он работает правильно.

Однако, когда я использую запрос POST (https://www.majorcineplex.com/ajaxbooking/ajax_showtime) прямо в браузере. Он показывает мне «Нет информации для этого шоу».

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

Заранее благодарен за любую предоставленную помощь / совет.

Обновление от 29 мая 2019 года

Вот мой код для паука Scrapy.

В основном из ответа я пытаюсь получить элемент div с помощью class = book_st_contain .

Я уверен, что этот элемент div находится в HTML, как я проверял с помощью Chrome Dev Tools. Однако, когда я запускаю паука, его просто нет.

class SessionSpider(scrapy.Spider):
    name = 'session'
    start_urls = [
      'https://www.majorcineplex.com/booking2/search_showtime/cinema=1'
    ]

    def parse(self, response):
        f = open('response.txt', 'w')
        f.write(response.text)

1 Ответ

0 голосов
/ 29 мая 2019

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

chrome inspector tool showing major.com post request

Паук-скрап для воспроизведения этого будет выглядеть примерно так:

class MySpider(spider):
    name = 'major'

    showtime_url = "https://www.majorcineplex.com/ajaxbooking/ajax_showtime"
    showtime_headers = {
        'Accept': "*/*",
        'X-Requested-With': "XMLHttpRequest",
        'Content-Type': "application/x-www-form-urlencoded; charset=UTF-8",
    }
    showtime_payload = "movie_text=&cinema_text={}".format

    def start_requests():
        # crawl cinemas with ids 1 to 10
        for cinema in range(1, 10):
            payload = self.showtime_payload(cinema)
            yield Request(
                self.showtime_url,
                headers=self.showtime_headers,
                body=payload,
                method='POST'
            )

Прежде всего вы должны убедиться, что заголовки Content-Type и X-Requested-With присутствуют и соответствуют значениям, которые вы видите в вашем инспекторе.

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