Данные формы запроса Scrapy - PullRequest
1 голос
/ 17 марта 2019

Я хочу получить результат поиска, используя запрос на запись, после ввода значения CP Number как 16308 https://www.icsi.in/Student/Default.aspx?TabID=100.

Вот мой код паука-скрапа: -

def parse(self, response):
    head=response.xpath('//span[@id="dnn_ctlHeader_dnnBreadcrumb_lblBreadCrumb"]/span[@class="SkinObject"]/text()').extract_first()
    view_gen = response.xpath('//input[@id="__VIEWSTATEGENERATOR"]/@value').extract_first()
    dnn= response.xpath('//input[@id="__dnnVariable"]/@value').extract_first()
    view_state = response.xpath('//input[@id="__VIEWSTATE"]/@value').extract_first()
    view_val = response.xpath('//input[@id="__EVENTVALIDATION"]/@value').extract_first()

    data={
            '__VIEWSTATEGENERATOR':view_gen,
            '__dnnVariable':dnn,
            '__VIEWSTATE':view_state,
            '__EVENTVALIDATION':view_val,
            'dnn$ctr410$MemberSearch$txtCpNumber':'16803',
            'dnn$ctr410$MemberSearch$ddlMemberType':'0'

    }
    yield scrapy.FormRequest(response.url,formdata=data,callback=self.fun)

Ответ ОТЛАДКА: Сканировано (200) https://www.icsi.in/Student/Default.aspx?tabid=100&error=An%20unexpected%20error%20has%20occurred&content=0> (реферер: https://www.icsi.in/Student/Default.aspx?TabID=100) []

1 Ответ

1 голос
/ 22 марта 2019

Ответ ОТЛАДКА: Сканировано (200) https://www.icsi.in/Student/Default.aspx?tabid=100&error=An%20unexpected%20error%20has%20occurred&content=0> (реферер: https://www.icsi.in/Student/Default.aspx?TabID=100) []

Ваш вопрос: как избежать правильной ошибки?Постарайтесь быть более конкретным в будущем.

Когда вы хотите почистить веб-страницу, вы должны проверить все это в своем браузере, увидеть все параметры, которые отправляются с запросом, и убедитесь, что вы делаете то же самое.на вашем пауке. У вас есть много параметров в вашем коде, но не все.

Смотрите мой код, который фактически решает вашу проблему:

import scrapy

class MySpider(scrapy.Spider):
    name = 'icsi'

    start_urls = ['https://www.icsi.in/Student/Default.aspx?TabID=100']

    search_action_url = 'https://www.icsi.in/Student/Default.aspx?TabID=100'

    def parse(self, response):
        formdata = dict()
        for input in response.css('form#Form input'):
            name = input.xpath('./@name').get()
            value = input.xpath('./@value').get()
            formdata[name] = str(value) if value else ''
        formdata['dnn$ctr410$MemberSearch$txtCpNumber'] = '16308'
        formdata['__EVENTTARGET'] = 'dnn$ctr410$MemberSearch$btnSearch'

        return scrapy.FormRequest(self.search_action_url, formdata=formdata, callback=self.parse_search)

    def parse_search(self, response):
        scrapy.shell.inspect_response(response, self)
        return

Вы пропустили параметр __EVENTTARGET, о котором на сайте сообщается, вы нажали кнопку «Поиск».

...