我正在尝试下载一个文件,该文件的下载链接是根据某些 Cookie 生成的。 我有一个 PDF 文件,显示在 查看器 中,该查看器有一个下载按钮 当我单击此图标时,会根据 HTML 中的hidden_document_field_id 输入值生成临时下载链接
,因此本例中的临时下载链接是 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