
1 h3ikichi 2017-01-30 18:55:22 +08:00 via iPhone Try..Except... |
2 cha1 2017-01-30 18:57:13 +08:00 Supervisor |
3 bombless 2017-01-30 19:01:50 +08:00 via Android 还是对库的行为不熟悉吧 233 直接 panic 的库当然就不要用了,除非做的是随时崩溃随时恢复 |
4 bazingaterry 2017-01-30 19:02:06 +08:00 via iPhone catch 。 查一下文档这个函数会抛什么异常,都接住就好…… |
5 popbones 2017-01-30 19:15:39 +08:00 try: except: pass |
6 gamexg 2017-01-30 19:24:29 +08:00 python ? 每个任务最外侧接住所有异常并打印日志。 |
7 sheep3 2017-01-30 19:27:34 +08:00 难道不是 try catch 么,然后最好通知和记录,这个点爬不下去了继续爬别的点,如果出现大量错误做更高级别的通知,比如 server 酱啊,或者发个邮件啊,就这样。 |
8 sheep3 2017-01-30 19:27:45 +08:00 打好 log 就好 |
9 wellsc 2017-01-30 19:32:57 +08:00 let it crash |
10 gamexg 2017-01-30 19:34:10 +08:00 另外再补充下非爬虫涉及第三方的复杂任务,直接 multiprocessing.Process 另起一个进程来跑,出故障也只是任务进程出问题,主进程不会出问题,超时之类的情况直接杀子进程的进程树树,方便。 |
12 Yinz 2017-01-30 20:43:11 +08:00 一般用 queue 做多线程任务队列,然后在 worker 线程上先处理已知可能出现的 exception ,然后再套一个 except Exception 来抓未知的。 最后正常的任务会放到完成 queue 里,跳了未知 exception 的会放到一个 error queue 里,这样你可以人工处理完之后把 error queue 的全都倒回待处理 queue 里。 当然,肯定需要完整的 log 才方便查错了 |
13 aabbccli 2017-01-30 23:21:53 +08:00 用 REDIS 做队列,失败的用 TRY EXCEPT 再 PUSH 到未爬队列里 |
14 RqPS6rhmP3Nyn3Tm 2017-01-30 23:34:49 +08:00 via iPhone 抛出一个异常,然后记录下来,以后再尝试呗 |
15 syahd 2017-01-31 09:44:01 +08:00 via Android 用 scrapy 啊,而且爬之前要尽量搞清楚哪里会抛异常,并标记 try except 。 |
16 x8 2017-02-01 14:18:34 +08:00 为什么会全部停止?单线程爬取? 开多线程的话,暴力点处理就是在线程最外面 catch 所有异常,记下本次抓取的 url ,重新投递到任务队列。 对获取不成功的 url 进行重试计数,超过重试次数限制的就不再投递到任务队列,记下来,人工处理。 |
17 denonw 2017-02-03 14:31:02 +08:00 try catch 啊 |
18 whnzy 2017-02-08 23:09:13 +08:00 守护进程 |