Web scraping 从ASP.NET站点加载压缩文件

Web scraping 从ASP.NET站点加载压缩文件,web-scraping,scrapy,scrapy-splash,Web Scraping,Scrapy,Scrapy Splash,我需要一些帮助从asp.net网站下载文件。通常情况下,从浏览器中单击链接,文件将开始下载,但使用scrapy不可能做到这一点,因此我尝试执行以下操作: def retrieve(self, response): print('Response URL: {}'.format(response.url)) pattern = re.compile('(dg[^\']*)') for file in response.xpath('//table

我需要一些帮助从asp.net网站下载文件。通常情况下,从浏览器中单击链接,文件将开始下载,但使用scrapy不可能做到这一点,因此我尝试执行以下操作:

def retrieve(self, response):
        print('Response URL: {}'.format(response.url))

        pattern = re.compile('(dg[^\']*)')

        for file in response.xpath('//table[@id="dgFile"]/tbody/tr/td[2]/a'):
            file_url = file.xpath('@href').extract_first()

            target = re.search(pattern, file_url).group(1)
            viewstate = response.xpath('//*[@id="__VIEWSTATE"]/@value').extract_first()
            viewstategenerator = response.xpath('//*[@id="__VIEWSTATEGENERATOR"]').extract_first()
            eventvalidation = response.xpath('//*[@id="__EVENTVALIDATION"]').extract_first()

            data = {
                '_EVENTTARGET': target,
                '_VIEWSTATE': viewstate,
                '_VIEWSTATEGEERATOR': viewstategenerator,
                '_EVENTVALIDATION': eventvalidation
            }

            yield FormRequest.from_response(
                response,
                formdata=data,
                callback=self.end(response)
            )
我试图将信息提交到页面,以便将zip文件作为响应接收回来,但是这并没有像我希望的那样起作用。相反,我只是得到了与响应相同的页面

在这种情况下,甚至可以使用scrapy下载此文件吗?有人有什么建议吗


我也尝试过使用Selenium+PhantomJS,但我在尝试将会话从scrapy转移到Selenium时遇到了死胡同。我愿意将selenium用于这一功能,但我需要将scrapy用于此项目。

您尝试过使用文件管道吗?我以前使用文件管道下载文件,但在这些情况下,它一直使用到文件的直接链接,在这种情况下,我不知道如何这样做,因为链接如下:
javascript:u doPostBack('dgFile$ctl03$download','')
当您在浏览器中单击该链接时,它会使用我发布的代码中的参数执行发布。我的意思是,
javascript:u doPostBack('dgFile$ctl03$Download','')
将您带到哪里?如果您向该链接发送了一个不完整的post请求,您可以下载该文件。该链接向当前页面发出post请求,然后该页面将下载该文件。我应该提到,该文件是根据我之前的请求自动生成的,因此即使该文件有唯一的URL,它也不会是静态的。您可以尝试,它可以执行javascript来单击链接。一旦生成的URL返回,您就可以使用文件管道检索它。您尝试过使用文件管道吗?我以前使用文件管道下载文件,但在这些情况下,它一直使用到文件的直接链接,在这种情况下,我不知道如何这样做,因为链接如下:
javascript:u doPostBack('dgFile$ctl03$download','')
当您在浏览器中单击该链接时,它会使用我发布的代码中的参数执行发布。我的意思是,
javascript:u doPostBack('dgFile$ctl03$Download','')
将您带到哪里?如果您向该链接发送了一个不完整的post请求,您可以下载该文件。该链接向当前页面发出post请求,然后该页面将下载该文件。我应该提到,该文件是根据我之前的请求自动生成的,因此即使该文件有唯一的URL,它也不会是静态的。您可以尝试,它可以执行javascript来单击链接。一旦生成的URL返回,您就可以使用文件管道检索它。