Scrapy的FormRequest没有给出结果

时间:2018-01-01 23:55:12

标签: python request scrapy

我正在使用Scrapy尝试在this网站上进行搜索。 我正在改变的领域是NúmerodoProcesso na ORIGEM ,id为'idNumeroOriginario'。

但是,Post方法似乎没有改变页面上的任何内容。

以下是代码:

import scrapy
from scrapy.utils.response import open_in_browser

class MinimalSpider(scrapy.Spider):
    name = 'stj-spider'
    start_urls = ['https://ww2.stj.jus.br/processo/pesquisa/?aplicacao=processos.ea']

    def parse(self, response):
        headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            'browserName': 'mozilla',
            'Connection': 'keep-alive',
            'Referer': 'https://ww2.stj.jus.br/processo/pesquisa/?aplicacao=processos.ea',
        }
        yield scrapy.FormRequest.from_response(
            response,
            headers=headers,
            formid='idForm',
            formdata={'idNumeroOriginario': '1234'},
            callback=self.after_search,
        )

    def after_search(self, response):
        open_in_browser(response)        
        print response.body

我也尝试过请求,但无济于事。似乎有一百个隐藏的输入使它变得非常困难。

无论如何,谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

我们只需更改一行即可使其正常工作:

Task[] tasks = new Task[3];
        for (int i = 0; i < 3; i++)
        {

            int x = i;
            tasks[i] = Task.Factory.StartNew(() =>
            {

                // the processPath will be different based on whatever the value for i is
                ProcessStartInfo startInfo = null;
                switch (x)
                {
                    case 0:
                        startInfo = new ProcessStartInfo("c:\\windows\\notepad.exe");
                        break;
                    case 1:
                        startInfo = new ProcessStartInfo("c:\\windows\\explorer.exe");
                        break;
                    case 2:
                        startInfo = new ProcessStartInfo("c:\\windows\\regedit.exe");
                        break;
                }
                Process proc = Process.Start(startInfo);
                proc.WaitForExit();
            });
        }
        Task.WaitAll(tasks);

了解您在此处指定formdata={'idNumeroOriginario': '1234'}, 表单值的方式。

问题是,idNumeroOriginarioidNumeroOriginario值,但表单输入id值用作表单请求参数名称,将其更改为:

name