python爬虫之urllib,伪装,超时设置,异常处理的方法


Posted in Python onDecember 19, 2018

Urllib

1. Urllib.request.urlopen().read().decode()

返回一个二进制的对象,对这个对象进行read()操作,可以得到一个包含网页的二进制字符串,然后用decode()解码成html源码

2. urlretrieve()

将一个网页爬取到本地

3. urlclearup()

清除 urlretrieve()所产生的缓存

4. info()

返回一个httpMessage对象,表示远程服务器的头信息

5. getcode()

获取当前网页的状态码 200代表成功,404网页未找到

6. geturl()

获取当前爬取页面的网址

示例:

from urllib import request
# urlretrieve() -- 将一个网页爬取到本地
request.urlretrieve("http://www.baidu.com",filename="demo.html")

# urlclearup() -- 清除urlretrieve()所产生的缓存
request.urlcleanup()

# info() -- 返回一个httpMessage对象,表示远程服务器的头信息
data = request.urlopen("http://www.taobao.com")
print(data.info())

# getcode() -- 获取当前网页的状态码data.geturl()
print(data.getcode())

# 获取当前爬取页面的网址
print(data.geturl())

运行结果:

Server: Tengine
Date: Wed, 09 May 2018 09:55:16 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: close
Vary: Accept-Encoding
X-Snapshot-Age: 1
Content-MD5: tkjcPUrHBAIt2N/YXcuwZg==
Vary: Ali-Detector-Type, X-CIP-PT
Cache-Control: max-age=0, s-maxage=89
ETag: W/"29b8-16340528168"
Via: cache22.l2cm9[0,304-0,H], cache17.l2cm9[0,0], cache1.cn372[0,200-0,H], cache2.cn372[1,0]
Age: 70
X-Cache: HIT TCP_MEM_HIT dirn:-2:-2 mlen:-1
X-Swift-SaveTime: Wed, 09 May 2018 09:54:59 GMT
X-Swift-CacheTime: 36
Timing-Allow-Origin: *
EagleId: 3c1cf2e515258597167937091e
Set-Cookie: thw=cn; Path=/; Domain=.taobao.com; Expires=Thu, 09-May-19 09:55:16 GMT;
Strict-Transport-Security: max-age=31536000


200
https://www.taobao.com/

超时设置(timeout)

由于在实际的爬取过程中,部分网站可能访问过慢,影响性能,这时我们可设置超时访问.

示例: 如果在指定时间内正常访问,即输出获取数据的长度,如果超出指定时间,则抛出异常.

for i in range(0,10):
 try:
  data = urllib.request.urlopen("http://www.baidu.com",timeout=0.05).read()
  print(len(data))
 except Exception as e:
  print("出现异常:"+str(e))

运行结果:

114980
114888
114809
114839
114824
114611
出现异常:<urlopen error timed out>
出现异常:<urlopen error timed out>
出现异常:<urlopen error timed out>
115003

伪装

在爬取过程中,可能部分网站限制浏览器访问所以为了顺利达到我们的目的,我们对自己进行伪装.

这里我们介绍一下浏览器的伪装技术.

普通爬取:

from urllib import request
file = request.urlopen("http://www.baidu.com").read().decode()

通过浏览器伪装爬取数据:

方式一:

from urllib import request 
url = "http://www.baidu.com" 
headers = ("User-Agent"," Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36") #这里模拟浏览器 
opener = request.build_opener() 
opener.addheaders = [headers]
data = opener.open(url).read()
print(data)

方式二:

from urllib import request 
url = "http://www.baidu.com" 
headers = ("User-Agent"," Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36") #这里模拟浏览器 
opener = request.build_opener() 
opener.addheaders = [headers]
request.install_opener(opener)
data = request.urlopen(url).read().decode("utf-8")
print(data)

方式三:

from urllib import request 
url = "http://www.baidu.com" 
headers = {}"User-Agent":" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36"} #这里模拟浏览器,通过字典
req = request.Request(url=rul,headers=headers)
data = request.urlopen(req).read().decode("utf-8")
print(data)

异常处理

爬虫在运行过程中,可能会出现各种各样的问题,如果没有异常处理的话,爬出异常会直接崩溃停止运行,下次再运行的时候,爬虫又要重头开始,所以我们要开发的是一个具有顽强生命力的爬虫,必须要进行异常的处理.

常见异常示例:

301 重定向
403 禁止访问
404 没有找到页面
500 服务器内部出现问题
200 成功

python中有两个异常处理的类:URLError与HttpError

HttpError 是 URLError子类
 HttpError 有异常状态码和异常原因
 URLError 只有异常原因,没有异常状态码
 所以,在异常处理的时候,不能使用URLError来代替
 如果想要代替,必须要进行判断,判断是否有状态码属性

 会产生URLError的情况:
  1.连接不上服务器
  2.远程的url不存在
  3.本地网络
  4.HttpError(是子类,也会出发会产生URLError

格式如下:

from urllib import error,request
try: # 可能会出现异常的代码

 data = request.urlopen("http://www.aliyu.com").read()
 print(data)

except error.URLError as e: # 进行异常的处理

 if hasattr(e,"code"): # 判断是否有状态码

  print(e.code) # 状态码

 if hasattr(e,"reason"): # 判断是否有异常原因

  print(e.reason) # 异常原因

以上这篇python爬虫之urllib,伪装,超时设置,异常处理的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简单使用Python自动生成文章
Dec 25 Python
使用优化器来提升Python程序的执行效率的教程
Apr 02 Python
Python 文件操作的详解及实例
Sep 18 Python
Python实现购物车购物小程序
Apr 18 Python
Python绘制堆叠柱状图的实例
Jul 09 Python
python numpy 常用随机数的产生方法的实现
Aug 21 Python
pytorch 图像预处理之减去均值,除以方差的实例
Jan 02 Python
使用Keras画神经网络准确性图教程
Jun 15 Python
关于探究python中sys.argv时遇到的问题详解
Feb 23 Python
用python自动生成日历
Apr 24 Python
python对文档中元素删除,替换操作
Apr 02 Python
Python可视化神器pyecharts之绘制地理图表练习
Jul 07 Python
python3实现网络爬虫之BeautifulSoup使用详解
Dec 19 #Python
python爬虫超时的处理的实例
Dec 19 #Python
pycharm中使用anaconda部署python环境的方法步骤
Dec 19 #Python
Django框架模板注入操作示例【变量传递到模板】
Dec 19 #Python
python json.loads兼容单引号数据的方法
Dec 19 #Python
Python查找文件中包含中文的行方法
Dec 19 #Python
对python requests发送json格式数据的实例详解
Dec 19 #Python
You might like
解析PHP实现下载文件的两种方法
2013/07/05 PHP
Yii分页用法实例详解
2014/12/04 PHP
PHP封装的完整分页类示例
2018/08/21 PHP
Javascript中的数学函数
2007/04/04 Javascript
node.js中的console.info方法使用说明
2014/12/09 Javascript
JavaScript实现强制重定向至HTTPS页面
2015/06/10 Javascript
jQuery实现图片渐入渐出切换展示效果
2015/08/15 Javascript
javascript下使用Promise封装FileReader
2016/02/19 Javascript
JS创建对象的写法示例
2016/11/04 Javascript
Bootstrap Modal遮罩弹出层(完整版)
2016/11/21 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
详解使用vue实现tab 切换操作
2017/07/03 Javascript
利用express启动一个server服务的方法
2017/09/17 Javascript
js 显示日期时间的实例(时间过一秒加1)
2017/10/25 Javascript
ajax请求+vue.js渲染+页面加载的示例
2018/02/11 Javascript
浅谈如何使用webpack构建多页面应用
2018/05/30 Javascript
js中split()方法得到的数组长度问题
2018/07/19 Javascript
AngularJs1.x自定义指令独立作用域的函数传入参数方法
2018/10/09 Javascript
Python中的异常处理简明介绍
2015/04/13 Python
Python实现朴素贝叶斯的学习与分类过程解析
2019/08/24 Python
python打印直角三角形与等腰三角形实例代码
2019/10/20 Python
css3气泡 css3关键帧动画创建的动态通知气泡
2013/02/26 HTML / CSS
css3针对移动端卡顿问题的解决(动画性能优化)
2020/02/14 HTML / CSS
欧洲当代手工玻璃和瓷器的领先品牌:LSA International
2018/06/03 全球购物
英国最大的在线时尚眼镜店:Eyewearbrands
2019/03/12 全球购物
日本必酷网络直营店:Biccamera
2019/03/23 全球购物
庆元旦迎新年广播稿
2014/02/18 职场文书
中学教师暑期培训方案
2014/08/27 职场文书
公共艺术专业自荐信
2014/09/01 职场文书
上班迟到检讨书
2014/09/15 职场文书
关于召开会议的通知
2015/04/15 职场文书
2015暑期社会实践调查报告
2015/07/14 职场文书
2015年小学财务工作总结
2015/07/20 职场文书
推广普通话宣传标语口号
2015/12/26 职场文书
redis哨兵常用命令和监控示例详解
2021/05/27 Redis
python中urllib包的网络请求教程
2022/04/19 Python