python3使用urllib模块制作网络爬虫


Posted in Python onApril 08, 2016

urllib

urllib模块是python3的URL处理包

其中:

1、urllib.request主要是打开和阅读urls

个人平时主要用的1:

打开对应的URL:urllib.request.open(url)

用urllib.request.build_opener([handler, ...]),来伪装成对应的浏览器

import urllib
#要伪装成的浏览器(我这个是用的chrome)
headers = ('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36')
url='http://hotels.ctrip.com/'
opener = urllib.request.build_opener()
#将要伪装成的浏览器添加到对应的http头部
opener.addheaders=[headers]
#读取相应的url
data = opener.open(url).read()
#将获得的html解码为utf-8
data=data.decode('utf-8')
print(data)

2、urllib.parse主要是用来解析url

主要方法:

urllib.parse.urlparse(urlstring)

功能:将对应的URL解析成六部分,并以元组的数据格式返回来。(在功能上和urlsplit()几乎一模一样)

import urllib
o = urllib.parse.urlparse('http://www.cwi.nl:80/%7Eguido/Python.html')
print(o)
print(o.path)
print(o.scheme)
print(o.port)
print(o.geturl())

对应的结果:

ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='')
/%7Eguido/Python.html
http
80
http://www.cwi.nl:80/%7Eguido/Python.html

2、构建一个新的url——urllib.parse.urljoin(base, url)

参数:base:基本的URL链接

   url:另一个url

from urllib.parse import urljoin
a=urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html')
print(a)

结果:http://www.cwi.nl/%7Eguido/FAQ.html

这个函数在爬虫的时候应该方便多了,我之前用的是比较笨的方法直接字符串拼接

3、异常处理 urllib.error

用 try-except来捕捉异常

主要的错误方式就两种 URLError和HTTPError

因为HTTPError是URLError的子类,所以URLError应该写在HttpError后面,说白了就是找到儿子一定知道父亲,找到父亲,不一定知道儿子。

try:
  data=urllib.request.urlopen(url)
  print(data.read().decode('utf-8'))
except urllib.error.HTTPError as e:
  print(e.code)
except urllib.error.URLError as e:
  print(e.reason)

结果:[WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

如果捕获到了HTTPError,则输出code,不会再处理URLError异常。如果发生的不是HTTPError,则会去捕获URLError异常,输出错误原因

Python 相关文章推荐
python函数参数*args**kwargs用法实例
Dec 04 Python
Python中xrange与yield的用法实例分析
Dec 26 Python
python实现人人自动回复、抢沙发功能
Jun 08 Python
python 对给定可迭代集合统计出现频率,并排序的方法
Oct 18 Python
PyQt4 treewidget 选择改变颜色,并设置可编辑的方法
Jun 17 Python
python 中pyqt5 树节点点击实现多窗口切换问题
Jul 04 Python
在python plt图表中文字大小调节的方法
Jul 08 Python
python加载自定义词典实例
Dec 06 Python
python实现局域网内实时通信代码
Dec 22 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
Feb 11 Python
Django中使用Json返回数据的实现方法
Jun 03 Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
Jan 30 Python
Python抓取电影天堂电影信息的代码
Apr 07 #Python
Python Requests安装与简单运用
Apr 07 #Python
Python Requests 基础入门
Apr 07 #Python
Python检测网站链接是否已存在
Apr 07 #Python
python多进程共享变量
Apr 06 #Python
python socket多线程通讯实例分析(聊天室)
Apr 06 #Python
python文件的md5加密方法
Apr 06 #Python
You might like
咖啡磨器 如何选购一台适合家用的意式磨豆机
2021/03/05 新手入门
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
2006/12/06 PHP
PHP实现加密的几种方式介绍
2015/02/22 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
2018/05/23 PHP
菜鸟javascript基础资料整理2
2010/12/06 Javascript
javascript 使td内容不换行不撑开
2012/11/29 Javascript
Js冒泡事件详解及阻止示例
2014/03/21 Javascript
jQuery实现鼠标划过添加和删除class的方法
2015/06/26 Javascript
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
2015/11/23 Javascript
基于JQuery实现图片轮播效果(焦点图)
2016/02/02 Javascript
浅谈Nodejs中的作用域问题
2016/12/26 NodeJs
elemetUi 组件--el-upload实现上传Excel文件的实例
2017/10/27 Javascript
vue.js简单配置axios的方法详解
2017/12/13 Javascript
vue.js实现插入数值与表达式的方法分析
2018/07/06 Javascript
微信小程序自定义组件传值 页面和组件相互传数据操作示例
2019/05/05 Javascript
对TypeScript库进行单元测试的方法
2019/07/18 Javascript
Vue实现PC端靠边悬浮球的代码
2020/05/09 Javascript
解决vue 退出动画无效的问题
2020/08/09 Javascript
jQuery实现二级导航菜单的示例
2020/09/30 jQuery
vue打包通过image-webpack-loader插件对图片压缩优化操作
2020/11/12 Javascript
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
[42:04]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第一局
2016/03/03 DOTA
总结Python编程中三条常用的技巧
2015/05/11 Python
利用Python学习RabbitMQ消息队列
2015/11/30 Python
python之当你发现QTimer不能用时的解决方法
2019/06/21 Python
css3动画事件—webkitAnimationEnd与计时器time事件
2013/01/31 HTML / CSS
css3 边框、背景、文本效果的实现代码
2018/03/21 HTML / CSS
Spartoo西班牙官网:法国时尚购物网站
2018/03/27 全球购物
自我评价如何写好?
2014/01/05 职场文书
学生爱国演讲稿
2014/01/14 职场文书
中文师范生自荐信
2014/01/30 职场文书
勤俭节约演讲稿
2014/05/08 职场文书
2014年工作总结与下年工作计划
2014/11/27 职场文书
红色革命电影观后感
2015/06/18 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
CSS实现章节添加自增序号的方法
2021/06/23 HTML / CSS