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实现忽略大小写对字符串列表排序的方法
Sep 25 Python
详解python实现读取邮件数据并下载附件的实例
Aug 03 Python
Python使用asyncio包处理并发详解
Sep 09 Python
Python cookbook(数据结构与算法)从字典中提取子集的方法示例
Mar 22 Python
python3 判断列表是一个空列表的方法
May 04 Python
对python以16进制打印字节数组的方法详解
Jan 24 Python
Python嵌套式数据结构实例浅析
Mar 05 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
Nov 07 Python
基于python调用psutil模块过程解析
Dec 20 Python
浅谈Python的方法解析顺序(MRO)
Mar 05 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
Mar 09 Python
django-利用session机制实现唯一登录的例子
Mar 16 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
15种PHP Encoder的比较
2007/03/06 PHP
Zend的MVC机制使用分析(二)
2013/05/02 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
2014/01/14 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
php中隐形字符65279(utf-8的BOM头)问题
2014/08/16 PHP
PHP钩子与简单分发方式实例分析
2017/09/04 PHP
javascript 常用方法总结
2009/06/03 Javascript
100个不能错过的实用JS自定义函数
2014/03/05 Javascript
jquery重复提交请求的原因浅析
2014/05/23 Javascript
使用Node.js实现HTTP 206内容分片的教程
2015/06/23 Javascript
基于JavaScript实现移除(删除)数组中指定元素
2016/01/04 Javascript
Javascript删除指定元素节点的方法
2016/06/21 Javascript
浅谈Web页面向后台提交数据的方式和选择
2016/09/23 Javascript
前端设计师们最常用的JS代码汇总
2016/09/25 Javascript
浅析Javascript的自动分号插入(ASI)机制
2016/09/29 Javascript
javaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序整理总结
2016/10/10 Javascript
jQuery加密密码到cookie的实现代码
2017/04/18 jQuery
JS实现异步上传压缩图片
2017/04/22 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
2017/04/25 Javascript
vue图片上传本地预览组件使用详解
2019/02/20 Javascript
修改NPM全局模式的默认安装路径的方法
2020/12/15 Javascript
python3实现抓取网页资源的 N 种方法
2017/05/02 Python
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
python实现几种归一化方法(Normalization Method)
2019/07/31 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
2019/10/17 Python
python3实现单目标粒子群算法
2019/11/14 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
Lookfantastic挪威官网:英国知名美妆购物网站
2017/07/26 全球购物
如果NULL定义成#define NULL((char *)0)难道不就可以向函数传入不加转换的NULL了吗
2012/02/15 面试题
《台湾的蝴蝶谷》教学反思
2014/02/20 职场文书
大学应届毕业生求职信
2014/05/24 职场文书
公司委托书范本5篇
2014/09/20 职场文书
2014年政府采购工作总结
2014/12/09 职场文书
乡镇一岗双责责任书
2015/01/29 职场文书
2015年化验员工作总结
2015/04/10 职场文书