如题,爬虫运行的时候难免会遇到各种意外,很有可能导致整个程序都终止。。。。
各位大佬一般是怎么解决的?
各位大佬一般是怎么解决的?
|
h3ikichiJan 30, 2017 via iPhone
1
Try..Except...
|
|
cha1Jan 30, 2017
2
Supervisor
|
|
bomblessJan 30, 2017 via Android
3
还是对库的行为不熟悉吧 233
直接 panic 的库当然就不要用了,除非做的是随时崩溃随时恢复 |
|
bazingaterryJan 30, 2017 via iPhone
4
catch 。
查一下文档这个函数会抛什么异常,都接住就好…… |
|
popbonesJan 30, 2017
5
try:
except: pass |
|
gamexgJan 30, 2017
6
python ?
每个任务最外侧接住所有异常并打印日志。 |
|
sheep3Jan 30, 2017
7
难道不是 try catch 么,然后最好通知和记录,这个点爬不下去了继续爬别的点,如果出现大量错误做更高级别的通知,比如 server 酱啊,或者发个邮件啊,就这样。
|
|
sheep3Jan 30, 2017
8
打好 log 就好
|
|
wellscJan 30, 2017
9
let it crash
|
|
gamexgJan 30, 2017
10
另外再补充下非爬虫涉及第三方的复杂任务,直接 multiprocessing.Process 另起一个进程来跑,出故障也只是任务进程出问题,主进程不会出问题,超时之类的情况直接杀子进程的进程树树,方便。
|
|
YinzJan 30, 2017
12
一般用 queue 做多线程任务队列,然后在 worker 线程上先处理已知可能出现的 exception ,然后再套一个 except Exception 来抓未知的。
最后正常的任务会放到完成 queue 里,跳了未知 exception 的会放到一个 error queue 里,这样你可以人工处理完之后把 error queue 的全都倒回待处理 queue 里。 当然,肯定需要完整的 log 才方便查错了 |
|
13
用 REDIS 做队列,失败的用 TRY EXCEPT 再 PUSH 到未爬队列里
|
|
RqPS6rhmP3Nyn3TmJan 30, 2017 via iPhone
14
抛出一个异常,然后记录下来,以后再尝试呗
|
|
syahdJan 31, 2017 via Android
15
用 scrapy 啊,而且爬之前要尽量搞清楚哪里会抛异常,并标记 try except 。
|
|
x8Feb 1, 2017
16
为什么会全部停止?单线程爬取?
开多线程的话,暴力点处理就是在线程最外面 catch 所有异常,记下本次抓取的 url ,重新投递到任务队列。 对获取不成功的 url 进行重试计数,超过重试次数限制的就不再投递到任务队列,记下来,人工处理。 |
|
denonwFeb 3, 2017
17
try catch 啊
|
|
whnzyFeb 8, 2017
18
守护进程
|