809669515

2018-10-21   阅读量: 933

数据分析师 Python编程 Python爬虫

python爬虫常见报错小结及解决方法

扫码加入数据分析学习群

首先声明下面的报错是在使用BeautifulSoup的基础上的
**(1).list index out of range **
这种情况基本就是你获取的列表为空,所以在选取第x各元素([x])时就会报错。
(2).requests 要对返回的状态码做判断
r=requests.get(url)
if r.status_code==200:
(3).异常
异常是指程序中的例外,违例情况。异常机制是指程序出现错误后,程序的处理方法。当出现错误后,程序的执行流程发生改变,程序的控制权转移到异常处理。可能情况有,比如写入文件的时候,磁盘满了,写不进去了;从网络抓取数据,网络突然断掉了;抓取数据时ip被封等等。
其他异常如写进文件时磁盘满了等情况在后面进行文件操作时才会涉及。单单就爬虫过程来看一般是在requests()过程中出现下面几种异常情况:
一、遇到网络问题时,Requests会抛出一个 ConnectionError 异常。
具体情况有两种:一是请求的网址错误或不存在;二是网络中断
二、遇到无效HTTP响应时,Requests则会抛出一个 HTTPError 异常。
具体情况有:服务器拒绝连接,即ip被封等
一般HTTPError又分为 4XX:客户端错误 和 5XX:服务器错误。
对于前两种异常通常使用try...exception...来解决,具体如下:

try:

#这一部分写正常的运行语句

req=requests.get(url)

...

...

except (requests.ConnectionError, IndexError, UnicodeEncodeError,TimeoutError)

print(e.args)

except requests.HTTPError as f:

print('The server couldn\'t fulfill the request.')
ip被封处理办法

若请求超时,则抛出一个 Timeout 异常。
具体情况有:网络断开,但经常显示无法连接;网络阻塞;网络不稳定,网络无法完整传送服务器信息;系统原因,系统资源过低,不足以
解决办法:
Timeout又分为connect timeout和read timeout。前者指的是你发出request请求到和服务器建立连接之间的等待时间;后者是同服务器建立连接后到服务器发回response之间的等待时间。那么在请求时可以加上相应的timeout时间,形式如下:
a).r = requests.get('https://XXXX.com', timeout=5)表示默认connect timeout和read timeout的值均为5秒;
b). r = requests.get('https://XXXX.com', timeout=(3.05, 27))表示connect timeout=3.05秒,read timeout=27秒;
c).r = requests.get('https://XXXX.com', timeout=None)则表示一直等待到服务器有响应为止。

添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
0.0000 0 2 关注作者 收藏

评论(0)


暂无数据

推荐课程

推荐帖子