背景:
- 有一个视频网站,需要登录,由于有 recaptcha 和 fingerprint 存在,模拟登录不太会,所以手动写入 cookie 到代码中去实现登录
- 固定的位置的 json 文件,会存储视频的相关信息,格式是{"url":视频名称"}
- json 文件中存储的 url 是视频播放页面,这个页面不需要登录,可以直接解析出来真实的视频地址
我的逻辑是这样的:
如果代码中设置的 Cookie 失效或者没设置,就直接从指定的位置读 json 文件。然后请求文件中的 url,解析出来真实的视频地址,放到 pipeline 中下载
如果代码中设置的 cookie 有效,那么就分析视频列表页面,将结果写入 json 文件,然后读取文件下载
所以,我在第一段逻辑中需要设置一个关闭 scrapy,这部分代码如下
if 'login.php' in response.url: self.logger.warn('cookie 失效,直接用 follow.json 下载') with open('myfollowinfo/follow.json') as f: movie_info = json.loads(f.read()) self.logger.warn('文件中保存了{0}个视频'.format(len(movie_info))) for link, title in movie_info.items(): yield scrapy.Request(url=link, callback=self.parse_my_follow_real_link) raise CloseSpider(self.crawler) 由于我不知道下载视频需要多久,所以我是不能设置 CLOSESPIDER_TIMEOUT 的值的,所以根据 scrapy 的代码逻辑,会抛出 NotConfigured 异常
请问我目前这种需求应该怎么做呢?
