Получение ответа на запрос формы с использованием scrapy - PullRequest
0 голосов
/ 27 марта 2020

Я использую scrapy для отправки запроса формы. Поиск данных в браузере выполняется двумя способами:

  1. Форма заполнена на этой странице
  2. Запрос формы отправляется на эту ссылку .

Ответ используется для отображения таблицы данных и диаграммы на той же странице, где заполняется форма.

Вот фрагмент моего паука,

class NamisSpider(scrapy.Spider):
    name = "namis-spider"
    form_url = 'http://namis.gov.np/pages/market/marketPriceForm/'
    request_url = 'http://namis.gov.np/site/pages/ajax_priceList/'

    def start_requests(self):
        yield scrapy.Request(url=self.form_url, callback=self.parse)

    def parse(self, response):
        token = response.css('input[name="csrf_appcore"]::attr(value)').get()
        data = {
            'csrf_appcore': token,
            'market': '1',
            'category': '1',
            'commodity': '104',
            'date_from': '2075-01-01',
            'date_to': '2076-11-21',
        }

        yield scrapy.FormRequest(url=self.request_url, formdata=data, callback=self.parse_market_price)

    def parse_market_price(self, response):
        print(response)

Ответ, полученный в браузере после отправки формы, отображается здесь . Но я не могу повторить это с помощью скрапа. Ответ, который я получаю с помощью scrapy:

<200 http://namis.gov.np/site/pages/ajax_priceList/>

Но я хотел бы получить ответ json, полученный браузером.

PS: Даты основаны на Викраме Самвате .

1 Ответ

0 голосов
/ 30 марта 2020

У вас отсутствует заголовок для X-Requested-With.

`

import scrapy
import json

class NamisSpider(scrapy.Spider):
    name = "namis-spider"
    form_url = 'http://namis.gov.np/pages/market/marketPriceForm/'
    request_url = 'http://namis.gov.np/site/pages/ajax_priceList/'

    def start_requests(self):
        yield scrapy.Request(url=self.form_url, callback=self.parse)

    def parse(self, response):
        token = response.css('input[name="csrf_appcore"]::attr(value)').get()

        data = {
            'csrf_appcore': token,
            'market': '1',
            'category': '1',
            'commodity': '104',
            'date_from': '2076-11-21',
            'date_to': '2076-11-21',
        }
        headers = {
            "X-Requested-With":"XMLHttpRequest",
        }

        yield scrapy.FormRequest(url=self.request_url, headers=headers, formdata=data, callback=self.parse_market_price)

    def parse_market_price(self, response):
        unicoded_response = response.body_as_unicode()
        json_response = json.loads(unicoded_response)
        print('json---->',json_response)
        print(json_response['status'])
        print(json_response['data'])

`

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...