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的几条建议分享
Feb 10 Python
Python装饰器使用示例及实际应用例子
Mar 06 Python
用Python从零实现贝叶斯分类器的机器学习的教程
Mar 31 Python
Django中使用group_by的方法
May 26 Python
python生成器generator用法实例分析
Jun 04 Python
微信跳一跳游戏python脚本
Apr 01 Python
selenium+python实现自动登录脚本
Apr 22 Python
python 读取竖线分隔符的文本方法
Dec 20 Python
使用CodeMirror实现Python3在线编辑器的示例代码
Jan 14 Python
python日期相关操作实例小结
Jun 24 Python
python实现最小二乘法线性拟合
Jul 19 Python
Python爬虫爬取有道实现翻译功能
Nov 27 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创建多级目录代码
2008/06/05 PHP
深入Nginx + PHP 缓存详解
2013/07/11 PHP
php车辆违章查询数据示例
2016/10/14 PHP
php实现简单四则运算器
2020/11/29 PHP
QQ登录简单实现代码
2021/03/09 Javascript
基于jquery实现的鼠标拖拽元素复制并写入效果
2011/08/23 Javascript
js取得url地址参数实例
2013/02/22 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
如何在Linux上安装Node.js
2016/04/01 Javascript
Angular和百度地图的结合实例代码
2016/10/19 Javascript
js实现带缓动动画的导航栏效果
2017/01/16 Javascript
js 倒计时(高效率服务器时间同步)
2017/09/12 Javascript
vue.js单文件组件中非父子组件的传值实例
2018/09/13 Javascript
深入koa-bodyparser原理解析
2019/01/16 Javascript
小程序click-scroll组件设计
2019/06/18 Javascript
Vue编程式跳转的实例代码详解
2019/07/10 Javascript
微信小程序实现吸顶特效
2020/01/08 Javascript
python 合并文件的具体实例
2013/08/08 Python
使用python检测主机存活端口及检查存活主机
2015/10/12 Python
从局部变量和全局变量开始全面解析Python中变量的作用域
2016/06/16 Python
在Python中定义一个常量的方法
2018/11/10 Python
python matplotlib拟合直线的实现
2019/11/19 Python
python 类之间的参数传递方式
2019/12/20 Python
Schecker荷兰:狗狗用品和配件
2019/06/06 全球购物
网络工程师面试(三木通信技术有限公司)
2013/06/05 面试题
介绍一下gcc特性
2012/01/20 面试题
关于幼儿的自我评价
2013/12/18 职场文书
八年级语文教学反思
2014/02/11 职场文书
高一新生军训方案
2014/05/12 职场文书
厕所文明标语
2014/06/11 职场文书
学雷锋宣传标语
2014/06/25 职场文书
施工员岗位职责
2015/02/10 职场文书
Python字符串对齐方法使用(ljust()、rjust()和center())
2021/04/26 Python
laravel添加角色和模糊搜索功能的实现代码
2021/06/22 PHP
Android开发 使用文件储存的方式保存QQ密码
2022/04/24 Java/Android
SpringBoot详解执行过程
2022/07/15 Java/Android