前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python-数据挖掘-网络异常

Python-数据挖掘-网络异常

作者头像
小团子
发布2019-07-18 11:35:30
8110
发布2019-07-18 11:35:30
举报
文章被收录于专栏:数据云团数据云团

Python-数据挖掘-请求伪装

一、超时设置

假设有个请求,要爬取1000个网站,如果其中有100个网站需要等待30s才能返回数据,如果要返回所有的数据,至少需要等待3000s。

可以为 HTTP 请求设置超时时间,一旦超过这个时间,服务器还没有返回响应内容,就会抛出一个超时异常,这个异常需要使用 try 语句来捕获。

例如,使用一个 IP,它的响应速度需要2秒。如果将超时时间设置为 1s,程序就会抛出异常。

代码语言:javascript
复制
import urllib.request
try:
  url = "http://47.104.14.43:8000"
  # timeout 设置超时的时间
  file = urllib.request.urlopen(url, timeout=1)
  result = file.read()
  print(result)
except Exception as error:
  print(error)

二、网络异常

使用 urlopen() 方法发送 HTTP 请求时,如果 urlopen() 不能处理返回的响应内容,就会产生错误。

① URLError 异常和捕获

URLError 产生的原因主要有以下几种:

  • 没有连接网络;
  • 服务器连接失败;
  • 找不到指定的服务器;

可以使用 try...except 语句捕获相应的异常。

代码语言:javascript
复制
import urllib.request
import urllib.error

request = urllib.request.Request("http://www.shujuyuntuan.com")
try:
  urllib.request.urlopen(request, timeout=5)
except urllib.error.URLError as err:
  print(err)

输出结果为:

代码语言:javascript
复制
<urlopen error [Error 11004] getaddrinfo failed>
报错信息是 urlopen error,错误代码是11004。发生错误的原因是没有找到指定的服务器。

② HttpError 异常和捕获

每个服务器的 HTTP 响应都有一个数字响应码,这些响应码有些表示无法处理请求内容。如果无法处理,urlopen() 会抛出 HTTPError。HTTPError 是 URLError 的子类,它的对象拥有一个整型的 code 属性,表示服务器返回的错误代码。

代码语言:javascript
复制
import urllib.request
import urllib.error

request = urllib.request.Request("http://47.104.14.43/index")
try:
  urllib.request.urlopen(request)
except urllib.error.HTTPError as e:
  print(e.code)

如果输出了 404 的错误码,表示没有找到这个页面。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档