Не обязательно использовать Spla sh, если вы посмотрите на сетевые инструменты chromedevtools. Он делает HTTP-запрос на получение с некоторыми параметрами. Это называется реинжинирингом HTTP-запросов и предпочтительнее использовать splash / selenium. Особенно, если вы собираете много данных.
In cases of re-engineering the request copying the BASH request and putting this into curl.trillworks.com. This gives me a nice formated headers, parameters and cookies for that particular request. I usually play about with this HTTP request using the requests python package. In this case, the simplest HTTP request is one where you just have to pass the parameters and not the headers.
Вот параметры, обратите внимание на номер страницы
Если вы посмотрите с правой стороны, у вас есть заголовки и параметры. Используя пакет reuqests, я понял, что вам нужно только передать параметры страницы, чтобы получить необходимую информацию.
params = (
('c[]', 'Rio de Janeiro'),
('pagina', '2'),
('_', '1596444852311'),
)
Вы можете изменить номер страницы, чтобы получить следующие 40 элементов контента. Вы также знаете, что на этой странице 590 элементов.
Это для второй страницы.
В качестве минимального примера этого в Scrapy
Пример кода
class TestSpider(scrapy.Spider):
name = 'test'
allowed_domains = ['vagas.com.br']
data = {
'c[]': 'Rio de Janeiro',
'pagina': '2',
'_':'1596444852311'}
def start_requests(self):
url = 'https://www.vagas.com.br/vagas-em-rio-de-janeiro'
yield scrapy.Request(url=url,callback=self.parse,meta={'data':self.data})
def parse(self, response):
card = response.xpath('//li[@class="vaga even "]')
print(card)
Объяснение
Используя start_requests
для построения первого URL-адреса, мы используем мета-аргумент и передаем словарь с именем data и передаем ему значение наших параметров в HTTP-запрос. Это захватывает HTML для следующих 40 элементов страницы, когда вы нажимаете кнопку.