首页 > 编程问答 >如何在Scrapy中下载根据Cookies url生成的文件

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

时间:2024-08-02 04:55:01浏览次数:8  
标签:python .net cookies scrapy

我正在尝试下载一个文件,该文件的下载链接是根据某些 Cookie 生成的。 我有一个 PDF 文件,显示在 查看器 中,该查看器有一个下载按钮 enter image description here 当我单击此图标时,会根据 HTML 中的hidden_​​document_field_id 输入值生成临时下载链接

enter image description here

,因此本例中的临时下载链接是 3 个内容的连接:

1.基本 url 链接(| ||https://onlineservices.miami-dadeclerk.com/officialrecords/ ) 2.输入值(DocumentHandler.axd/docs/304e6a24-0dbe-489d-b8a1-9a947d447136/rev1)

3 .下载字

完整链接

https://onlineservices.miami-dadeclerk.com/officialrecords/DocumentHandler.axd/docs/304e6a24-0dbe-489d-b8a1-9a947d447136/rev1/download 此链接是根据一些 Cookie(如会话 Cookie 和其他)生成,这意味着除非您有我的 Cookie,否则此链接对您不起作用。

我尝试使用 Scrapy 下载该文件,但出现 500 内部服务器错误,我不知道发生了什么事,我已经设置了该网站使用的所有 cookie

代码非常短,创建了一个简单的 start_request 以获得基本的 cookie,然后我使用 med 请求添加 AspxAutoDetectCookieSupport cookie,该 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

我的cookie:

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

{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']}

我正在寻找使用 Scrapy 和

Viewer 链接下载文件 link


遇到的问题是因为网站的下载链接不是简单地通过拼接 URL 字符串生成的,而是通过 JavaScript 动态生成的。这意味着即使手动构建了正确的 URL,的 Scrapy 爬虫也无法像的浏览器那样执行 JavaScript 代码,因此无法获取到真实的下载链接。

为了解决这个问题,可以考虑以下几种方法:

1. 使用 Scrapy 集成 JavaScript 渲染引擎:

  • 使用 Splash: Splash 是一个轻量级的 JavaScript 渲染服务,可以集成到 Scrapy 中。可以使用 Splash 来渲染页面并执行 JavaScript 代码,从而获取到真实的下载链接。
  • 使用 Selenium 或 Playwright: 这些工具可以模拟浏览器行为,包括执行 JavaScript 代码。可以使用它们来完全控制浏览器,并获取到下载链接。

2. 分析 JavaScript 代码:

  • 通过分析网页源代码,可以尝试找到生成下载链接的 JavaScript 代码逻辑。如果逻辑不太复杂,可以使用 Python 代码模拟该逻辑,从而生成下载链接。

3. 使用浏览器开发者工具分析网络请求:

  • 打开浏览器的开发者工具,监控网络请求。当点击下载按钮时,观察网络请求,找到下载文件的真实链接。可以使用 Scrapy 直接请求该链接。

以下是使用 Splash 集成到 Scrapy 中的示例代码:

import scrapy
from scrapy_splash import SplashRequest

class TestSpider(scrapy.Spider):
    name = "test_spider"

    def start_requests(self):
        url = "https://onlineservices.miami-dadeclerk.com/officialrecords/CFNDetailsHTML5.aspx?QS=5p8%2fNlBjKYBarc%2fJA16mTghonf9CxQ8L9b1X0TFjFkhkowtaD%2b8z7w%3d%3d"
        yield SplashRequest(url=url, callback=self.parse, args={'wait': 0.5})

    def parse(self, response):
        # 使用 Splash 渲染页面后,可以使用 XPath 或 CSS 选择器找到下载链接
        download_link = response.xpath('//a[contains(@href, "download")]/@href').get()

        if download_link:
            yield {'file_urls': [download_link]}

请注意:

  • 需要安装 Splash 并启动 Splash 服务。
  • 需要安装 scrapy-splash 库。

其他建议:

  • 在爬取网站之前,请务必查看该网站的 robots.txt 文件,以了解其爬取规则。
  • 请勿过度频繁地请求网站,以避免对网站造成负担。

希望这些信息能帮到!

标签:python,.net,cookies,scrapy
From: 57829395

相关文章

  • 在 Python 生成器中使用“with”语句管理资源
    今天,在编程时,我发现自己在生成器函数内管理资源(ssh连接),类似于以下内容:def_yield_fname(host_address,usr,pwd,datapath):withparamiko.SSHClient()asssh_client:ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh_client.......
  • Avro:在 Python 中使用多处理进行解码
    就最佳性能和更少延迟而言,哪种异步方法更适合解码从Kafka主题消耗的Avro消息?我正在使用Avro库的并发future,并且我仍然可以看到类似的执行时间与不使用并发future的情况相比。fromavro.ioimportBinaryDecoder,DatumReaderfromconfluent_kafka.avro.cached_sc......
  • 白盒测试基础与实践:Python示例及流程图设计
    文章目录前言一、白盒测试是什么?主要特点常用方法优点缺点二、白盒测试常用技术语句覆盖判定覆盖条件覆盖判定/条件覆盖条件组合覆盖路径覆盖三、程序流程图设计四、测试用例设计1.基本路径法2.语句覆盖3.判断覆盖4.条件覆盖5.判断/条件覆盖6.条件组合覆盖总结......
  • 【python的语法特点,如注释规则、代码缩进、编写规范等】
    介绍一下python的语法特点,如注释规则、代码缩进、编写规范等Python是一种广泛使用的高级编程语言,以其简洁易读的语法、丰富的标准库和强大的第三方库而闻名。下面我将详细介绍Python的一些基本语法特点,包括注释规则、代码缩进、以及编写规范等。一、注释规则Python......
  • 深圳大学-数据科学导论实验-python数据探索
    实验目的与要求掌握python编程基础。掌握数据探索基本操作。实验环境WindowsPyCharm实验数据salaries.csv"","rank","discipline","yrs.since.phd","yrs.service","sex","salary""1","Prof","B",......
  • 基于Python+Django协同过滤算法的招聘信息推荐系统设计与实现(源码+数据库+讲解)
    文章目录前言详细视频演示项目运行截图技术框架后端采用Django框架前端框架Vue可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......
  • python 栈帧沙箱逃逸
    基础理论什么是生成器生成器是python中的一种特殊的迭代器,在每次生成值以后会保留当前状态,以便下次调用可以继续生成值.python中生成器通过yield关键词进行定义,每次调用的时候返回一个值,并保持当前状态的同时暂停函数的执行.当下一次调用生成器的时候,函数会从上次暂停的位......
  • Transformer预测模型及其Python和MATLAB实现
    ###一、背景在自然语言处理(NLP)领域,传统的序列到序列(Seq2Seq)模型大多依赖于循环神经网络(RNN)和长短期记忆(LSTM)网络。这些模型虽然在许多任务中取得了成功,但由于其计算效率低下以及长距离依赖关系处理的不足,导致模型训练时间漫长,并在处理较长文本时效果不佳。2017年,Vaswani等人......
  • 随机森林(Random Forest)预测模型及其特征分析(Python和MATLAB实现)
    ##一、背景在大数据和机器学习的快速发展时代,数据的处理和分析变得尤为重要。随着多个领域积累了海量数据,传统的统计分析方法常常无法满足复杂问题的需求。在这种背景下,机器学习方法开始广泛应用。随机森林(RandomForest)作为一种强大的集成学习方法,因其高效性和较强的泛化能......
  • 【python脚本打包成exe】
    python项目打包成exe安装包分为三部分:1.python项目打包成可执行文件,依赖于一个python插件包pyinstaller        通过pipinstallpyinstaller安装即可。2.将python项目打包成可执行的exe文件及其依赖包        2.1在项目根目录下,输出python项目的配置文件(x......