Итак, я пытаюсь очистить сайт со следующей структурой:
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>
Итак, я пытаюсь понять процесс, стоящий за кодом:
- мы создаем паука, используя scrapy, который имитирует поведение браузера: запросы заголовков, аутентификации API и т. Д. c
- как только api доверяет нам, он затем предоставит нам данные нам нужно отобразить всю страницу, если мы хотим
, в этом случае нам не нужно отображать страницу, мы можем просто обработать файл json, возвращенный сервером. Я правильно понимаю? И как мне убедить сервер api передать данные?
Спасибо