1
h3ikichi 2017-01-30 18:55:22 +08:00 via iPhone
Try..Except...
|
2
zqhong 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 1
用 REDIS 做队列,失败的用 TRY EXCEPT 再 PUSH 到未爬队列里
|
14
RqPS6rhmP3Nyn3Tm 2017-01-30 23:34:49 +08:00 via iPhone
抛出一个异常,然后记录下来,以后再尝试呗
|
15
whwq2012 2017-01-31 09:44:01 +08:00 via Android
用 scrapy 啊,而且爬之前要尽量搞清楚哪里会抛异常,并标记 try except 。
|
16
lizon 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
守护进程
|