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编程中用close()方法关闭文件的教程
May 24 Python
利用Anaconda完美解决Python 2与python 3的共存问题
May 25 Python
Python AES加密实例解析
Jan 18 Python
小白如何入门Python? 制作一个网站为例
Mar 06 Python
Python中fnmatch模块的使用详情
Nov 30 Python
Python面向对象程序设计类的封装与继承用法示例
Apr 12 Python
关于Numpy中的行向量和列向量详解
Nov 30 Python
Python tkinter实现图片标注功能(完整代码)
Dec 08 Python
浅谈Python中的模块
Jun 10 Python
django template实现定义临时变量,自定义赋值、自增实例
Jul 12 Python
Python3 搭建Qt5 环境的方法示例
Jul 16 Python
Python调用SMTP服务自动发送Email的实现步骤
Feb 07 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
极典R601SW收音机
2021/03/02 无线电
CI框架自动加载session出现报错的解决办法
2014/06/17 PHP
PHP使用静态方法的几个注意事项
2014/09/16 PHP
php算法实例分享
2015/07/14 PHP
PHP实现递归复制整个文件夹的类实例
2015/08/03 PHP
android上传图片到PHP的过程详解
2015/08/03 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
2016/03/21 PHP
让你的PHP,APACHE,NGINX支持大文件上传
2021/03/09 PHP
js宝典学习笔记(上)
2007/01/10 Javascript
jquery 卷帘效果实现代码(不同方向)
2013/02/05 Javascript
animate动画示例(泪奔的小孩)及stop和delay的使用
2013/05/06 Javascript
JS案例分享之金额小写转大写
2014/05/15 Javascript
jQuery 隐藏和显示 input 默认值示例
2014/06/03 Javascript
Js实现网页键盘控制翻页的方法
2014/10/30 Javascript
基于jQuery实现瀑布流页面
2017/04/11 jQuery
Angular CLI 安装和使用教程
2017/09/13 Javascript
vue小白入门教程
2018/04/02 Javascript
解决layui前端框架 form表单,table表等内置控件不显示的问题
2018/08/19 Javascript
小程序实现自定义导航栏适配完美版
2019/04/02 Javascript
Vue使用Clipboard.JS在h5页面中复制内容实例详解
2019/09/03 Javascript
在Django中创建第一个静态视图
2015/07/15 Python
Python对列表去重的多种方法(四种方法)
2017/12/05 Python
python实现word 2007文档转换为pdf文件
2018/03/15 Python
Python针对给定列表中元素进行翻转操作的方法分析
2018/04/27 Python
利用Python如何批量更新服务器文件
2018/07/29 Python
基于Python实现用户管理系统
2019/02/26 Python
如何用python处理excel表格
2020/06/09 Python
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
使用phonegap操作数据库的实现方法
2017/03/31 HTML / CSS
DNA基因检测和分析:23andMe
2019/05/01 全球购物
linux系统都有哪些运行级别
2012/04/15 面试题
Servlet都有哪些方法?主要作用是什么?
2014/03/04 面试题
建筑工程质量通病防治方案
2014/06/08 职场文书
市场策划求职信
2014/08/07 职场文书
创新社会管理心得体会
2014/09/12 职场文书
爱情保证书
2015/01/17 职场文书