Правильный запрос формы на страницу прокрутки AJAX - PullRequest
0 голосов
/ 03 мая 2019

Я хочу очистить все «пояса» от https://www.thingiverse.com/thing:3270948/remixes в Scrapy.

enter image description here

Прежде всего я хочу написать правильный запрос. Я попробовал:

scrapy.FormRequest(url="https://www.thingiverse.com/thing:3270948/remixes", 
  method="POST",
  formdata={
    'page': '7',
    'id': '3270948'},
  headers={
    'x-requested-with': 'XMLHttpRequest',
    'content-type': 
      ['application/x-www-form-urlencoded',
       'charset=UTF-8']}

Ответ содержит только первую страницу (24 пояса). Как правильно написать запрос на получение следующих / целых ремней?

1 Ответ

1 голос
/ 03 мая 2019

У вас есть больше параметров в полезной нагрузке запроса, я скопировал их все из вкладки Сеть:

import scrapy


class TestSpider(scrapy.Spider):
    name = 'test'

    start_urls = ['https://www.thingiverse.com/thing:3270948/remixes']
    ajax_url = 'https://www.thingiverse.com/ajax/things/remixes'
    payload = 'id=3270948&auto_scroll=true&page={}&total=153&per_page=24&last_page=7&base_url=%2Fthing%3A3270948%2Fremixes%2F&extra_path=&%24container=.results-container&source=%2Fajax%2Fthings%2Fremixes'

    def parse(self, response):
        page = response.meta.get('page', 1)
        # why 7: check `last_page` param in payload
        if page == 7:
            return
        print '----'
        # just to show that content is always different, so pages are different
        print page, response.css('div.item-header a span::text').getall()[:3]
        print '----'
        yield scrapy.Request(self.ajax_url,
                             method='POST',
                             headers={
                                 'x-requested-with': 'XMLHttpRequest',
                                 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
                             },
                             body=self.payload.format(page + 1),
                             meta={'page': page + 1}
                             )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...