пытается получить json данные из API с загруженного ajax сайта - PullRequest
0 голосов
/ 07 мая 2020

Итак, я пытаюсь очистить сайт со следующей структурой:

HTML

Данные, которые я хочу визуализировать, используя ajax

HTML

Мои мысли о проблеме: 1- создать паука с помощью scrapy (потому что API находится в другом домене, требующем ключа api 2- очистить полученную страницу, которая была отображена пауком

code:

import scrapy
import json

class EventspageSpider(scrapy.Spider):
    name = 'eventsPage'
    start_urls = ['https://example.com/events/']

    headers = {
        "accept": "application/json",
        "Accept-Encoding": "gzip, deflate, br",
        "Accept-Language": "en-US,en;q=0.9",
        "Connection": "keep-alive",
        "Content-Length": "119",
        "content-type": "application/x-www-form-urlencoded",
        "Host": "av97urcqng-dsn.apiname.net",
        "Origin": "https://example.com",
        "Referer": "https://example.com/events/",
        "Sec-Fetch-Dest": "empty",
        "Sec-Fetch-Mode": "cors",
        "Sec-Fetch-Site": "cross-site",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36",
        "x-apiName-agent": "apiName for vanilla JavaScript 3.24.5;JS Helper 2.22.0",
        "x-apiName-application-id": "APP-ID",
        "x-apiName-api-key": "APIKEY",
    }

    def parse(self, response):
        url = "https://av97urcqng-dsn.apiName.net/1/indexes/*/queries?x-apiName-agent=apiName%20for%20vanilla%20JavaScript%203.24.5%3BJS%20Helper%202.22.0&x-apiName-application-id=APP-ID&x-apiName-api-key=APIKEY"
        request = scrapy.Request(url,
                                 callback=self.parse_api,
                                 headers=self.headers)
        yield request

    def parse_api(self, response):
        raw_data = response.body
        data = json.loads(raw_data)
        for event in data:
            eventName = data["localName"]

Он работал нормально до момента, когда был сделан запрос к API:

[scrapy.core.engine] DEBUG: Crawled (404) <GET https://apiname.net/1/404> (referer: None)
2020-05-07 15:10:04 [protego] DEBUG: Rule at line 1 without any user agent to enforce it on.

 ERROR: Gave up retrying <GET https://av97urcqng-dsn.apiname.net/1/indexes/*/queries?x-apiname-agent=apiname%20for%20vanilla%20JavaScript%203.24.5%3BJS%20Helper%202.22.0&x-apiname-application-id=appid&x-apiname-api-key=apikey>

Итак, я пытаюсь понять процесс, стоящий за кодом:

  1. мы создаем паука, используя scrapy, который имитирует поведение браузера: запросы заголовков, аутентификации API и т. Д. c
  2. как только api доверяет нам, он затем предоставит нам данные нам нужно отобразить всю страницу, если мы хотим
  3. , в этом случае нам не нужно отображать страницу, мы можем просто обработать файл json, возвращенный сервером. Я правильно понимаю? И как мне убедить сервер api передать данные?

    Спасибо

...