我正在下载一个文件,下载链接是根据某些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
此链接是根据一些cookies (如会话cookie和其他Cookies )生成的,这意味着除非您拥有我的cookie,否则此链接将无法为您工作。
我试着用Scrapy下载这个文件,但是我得到了500个内部服务器错误,我不知道发生了什么,我已经设置了这个网站使用的所有cookie
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,由于某些原因,我最终构建了完整的链接。
我的饼干:
{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和 查看器 链接下载一个文件
发布于 2019-09-13 12:21:34
该错误可能暗示,为了完全处理您的请求,缺少了其他内容:
使用python的请求库中的requests.get,您可以在cookies旁边添加参数params和头headers。您可以通过滚动下载并将curl转换为python请求来检索这些附加参数。在大多数情况下,这对我是有效的。卷曲模拟网络交互,包括整个浏览器会话。
然后,你会得到这样的东西:
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中实现它)。
https://stackoverflow.com/questions/57829395
复制相似问题