首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何下载根据Scrapy中的Cookies url生成的文件

如何下载根据Scrapy中的Cookies url生成的文件
EN

Stack Overflow用户
提问于 2019-09-06 23:05:02
回答 1查看 346关注 0票数 4

我正在下载一个文件,下载链接是根据某些Cookies生成的。我有一个查看器显示的PDF文件,这个查看器有一个下载按钮。

。当我单击此图标时,将根据HTML中的hidden_document_field_id输入值生成一个临时下载链接。

因此,本例中的临时下载链接是3种东西的连接:

1.基本网址链接(https://onlineservices.miami-dadeclerk.com/officialrecords/)

2.输入value(DocumentHandler.axd/docs/304e6a24-0dbe-489d-b8a1-9a947d447136/rev1)

3.下载word

全链路https://onlineservices.miami-dadeclerk.com/officialrecords/DocumentHandler.axd/docs/304e6a24-0dbe-489d-b8a1-9a947d447136/rev1/download

此链接是根据一些cookies (如会话cookie和其他Cookies )生成的,这意味着除非您拥有我的cookie,否则此链接将无法为您工作。

我试着用Scrapy下载这个文件,但是我得到了500个内部服务器错误,我不知道发生了什么,我已经设置了这个网站使用的所有cookie

代码语言:javascript
复制
class TestSpider(scrapy.Spider):
    name = "test_spider"

    def start_requests(self):
        url = "https://onlineservices.miami-dadeclerk.com/officialrecords/StandardSearch.aspx"
        yield scrapy.Request(url=url, callback=self.med)

    def med(self,response):
        yield scrapy.Request(url="https://onlineservices.miami-dadeclerk.com/officialrecords/CFNDetailsHTML5.aspx?QS=5p8%2fNlBjKYBarc%2fJA16mTghonf9CxQ8L9b1X0TFjFkhkowtaD%2b8z7w%3d%3d", callback=self.parse,cookies={'AspxAutoDetectCookieSupport': '1'})

    def parse(self, response):
        cookies = response.request.headers
        print(cookies)
        start_link = "https://onlineservices.miami-dadeclerk.com/officialrecords/"
        body = response.css('#hidden_document_field_id::attr(value)').get()
        end_link = "/download"
        full_link = start_link + body + end_link
        item = MyItem()
        item["file_urls"] = [full_link]
        yield item

代码非常短,创建了一个简单的start_request以获得基本的cookie,然后我使用med请求添加AspxAutoDetectCookieSupport cookie,由于某些原因,我最终构建了完整的链接。

我的饼干:

代码语言:javascript
复制
{b'Referer': [b'https://onlineservices.miami-dadeclerk.com/officialrecords/StandardSearch.aspx?AspxAutoDetectCookieSupport=1'], b'Accept': [b'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'], b'Accept-Language': [b'en'], b'User-Agent': [b'Mozilla/5
.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'], b'Accept-Encoding': [b'gzip,deflate'], b'Cookie': [b'AspxAutoDetectCookieSupport=1; NSC_JOohzzemcpqd5cxccsdmkpe5tar0zcM=ffffffff09303a5345525d5f4f58455e445a4a42378b;
 AspxAutoDetectCookieSupport=1; ASP.NET_SessionId=2kudtndycb15ffk2fsjtqyer']}

P:我不想修改我的代码。P:我意识到网站后端是用.NET制作的。

我想用Scrapy和 查看器 链接下载一个文件

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-13 12:21:34

该错误可能暗示,为了完全处理您的请求,缺少了其他内容:

使用python的请求库中的requests.get,您可以在cookies旁边添加参数params和头headers。您可以通过滚动下载并将curl转换为python请求来检索这些附加参数。在大多数情况下,这对我是有效的。卷曲模拟网络交互,包括整个浏览器会话。

然后,你会得到这样的东西:

代码语言:javascript
复制
    def parse(self, response):
            cookies = { "PHPSESSID" : #your session id}
            headers = { ... } # "User-Agent", "Accept", "Accept-Language", "Referer", "DNT", "Connection"
            ...

    def med(self,response):
            requests.get(url="...",cookies=cookies, headers=headers, params=params}

获取curl并将其转换为python请求的参数的说明-库:https://curl.trillworks.com/

希望这会有所帮助,即使它改变了您的代码(我不知道如何在scrapy中实现它)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57829395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档