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实现mysql的单引号字符串过滤方法
Nov 14 Python
Python中的多行注释文档编写风格汇总
Jun 16 Python
Python基于pillow判断图片完整性的方法
Sep 18 Python
Python探索之创建二叉树
Oct 25 Python
Python实现的爬取网易动态评论操作示例
Jun 06 Python
Numpy中的mask的使用
Jul 21 Python
Python WSGI的深入理解
Aug 01 Python
selenium+python实现1688网站验证码图片的截取功能
Aug 14 Python
在Pycharm中项目解释器与环境变量的设置方法
Oct 29 Python
解决django服务器重启端口被占用的问题
Jul 26 Python
Django项目uwsgi+Nginx保姆级部署教程实现
Apr 19 Python
使用python实现学生信息管理系统
Feb 25 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
PHP新手上路(九)
2006/10/09 PHP
CodeIgniter扩展核心类实例详解
2016/01/20 PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
2016/03/01 PHP
PHP Ajax JavaScript Json获取天气信息实现代码
2016/08/17 PHP
javascript 从if else 到 switch case 再到抽象
2010/07/17 Javascript
Ajax异步提交表单数据的说明及方法实例
2013/06/22 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
2014/10/17 Javascript
JQuery中DOM实现事件移除的方法
2015/06/13 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
javascript显示倒计时控制按钮的简单实现
2016/06/07 Javascript
js中常用的Math方法总结
2017/01/12 Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
2017/03/31 Javascript
jQuery 开发之EasyUI 添加数据的实例
2017/09/26 jQuery
使用jquery-easyui的布局layout写后台管理页面的代码详解
2019/06/19 jQuery
微信小程序项目总结之记账小程序功能的实现(包括后端)
2019/08/20 Javascript
Map与WeakMap类型在JavaScript中的使用详解
2020/11/18 Javascript
python装饰器初探(推荐)
2016/07/21 Python
Python基于Floyd算法求解最短路径距离问题实例详解
2018/05/16 Python
使用python3实现操作串口详解
2019/01/01 Python
python创建属于自己的单词词库 便于背单词
2019/07/30 Python
Python创建数字列表的示例
2019/11/28 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
2020/02/11 Python
Anaconda和ipython环境适配的实现
2020/04/22 Python
Python进行特征提取的示例代码
2020/10/15 Python
Prometheus开发中间件Exporter过程详解
2020/11/30 Python
土耳其家居建材网站:Koçtaş
2016/11/22 全球购物
linux系统都有哪些运行级别
2016/03/26 面试题
公务员综合考察材料
2014/02/01 职场文书
元旦促销方案
2014/03/15 职场文书
大学生考试作弊检讨书
2014/09/21 职场文书
党的群众路线教育实践活动个人对照检查材料(公安)
2014/11/05 职场文书
学籍证明模板
2014/11/21 职场文书
2015年暑期社会实践总结
2015/07/13 职场文书
MySQL REVOKE实现删除用户权限
2021/06/18 MySQL
OpenCV实现普通阈值
2021/11/17 Java/Android