Я пытаюсь установить царапать расписание сеансов на сайте кинотеатра. Когда я наблюдаю за запросами POST, которые сайт использует для получения сеансов (https://www.majorcineplex.com/booking2/search_showtime/cinema=1), он работает правильно.
Однако, когда я использую запрос POST (https://www.majorcineplex.com/ajaxbooking/ajax_showtime) непосредственно в браузере. Он показывает мне «Нет информации для этого шоу».
Я нахожу это странным, так как оба были запущены из одного и того же браузера Chrome, но я получаю разные результаты.
Заранее благодарю за любую помощь/совет.
Обновление от 29 мая 2019 г.
Вот мой код для паука Scrapy.
В основном из ответа я пытаюсь получить элемент div с класс = 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)
Привет Jeroen, да, я очень уверен, что URL-адрес запросов был таким же. Я проверил с помощью Chrome Dev Tool, и фактический URL-адрес (majorcineplex.com/booking2/search_showtime/cinema=1) использовал тот же запрос POST. (majorcineplex.com/ajaxbooking/ajax_showtime). Единственная разница заключалась в том, что я использовал запрос POST непосредственно в браузере Chrome. Я попробовал CURL, REST-Client в VS Code, но до сих пор не получаю расписание сеансов.
Эй, @ShawnParker, в основном вопросе об отладке должен быть ваш код, результаты, которые вы получаете, и результаты, которые вы ожидаете. Не могли бы вы предоставить свой код скрапинга? По крайней мере та часть, которая составляет Request
объект и, возможно, settings.py
содержимое?
Привет, @Granitosaurus, спасибо за ответ. Я обновил основной вопрос своими кодами. Ценю вашу помощь и советы.
Вам необходимо убедиться, что заголовки и опубликованное тело соответствуют тем, которые вы видите в инструментах разработки вашего браузера:
Скребковый паук, который воспроизведет это, будет выглядеть примерно так:
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
присутствуют и соответствуют значениям, которые вы видите в своем инспекторе.
Привет, добро пожаловать в переполнение стека. Вы уверены, что запросы, отправляемые на сервер, одинаковы (включая заголовки)? Вы можете использовать инструменты браузера F12 или такой инструмент, как Fiddler, чтобы исследовать это.