背景:
我的逻辑是这样的:
如果代码中设置的 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 异常
请问我目前这种需求应该怎么做呢?
1
warcraft1236 OP 求教求教
|
2
XxxxD 2019-02-08 18:05:25 +08:00
不是很懂你的两个逻辑,不过你试试获取登陆过后的 cookie,然后带这个 cookie 请求,不会那么容易失效的
|
3
warcraft1236 OP @XxxxD 简单说就是 我想在代码中的 if 条件真的时候,只执行 if 内的语句,剩下的这些都不执行,也就是说能不能有什么方法,让 if 里边的 yield scrapy.Request()这个都跑完然后关闭爬虫
|
4
tikazyq 2019-02-09 19:51:41 +08:00 via iPhone
设置 timeout
|
5
Alfred1993 2019-03-01 12:53:53 +08:00 via iPhone
Request()跑完不是会自动关闭吗
|
6
ccdrea 2019-04-26 15:40:33 +08:00
去看官方文档,Extensions 这部分。https://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/extensions.html
简单来说,setting 设置接收数据的信号收发标记,一段时间数据为空,自动关闭 scrapy |