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 BeautifulSoup设置页面编码的方法
Apr 03 Python
深入解析Python中的集合类型操作符
Aug 19 Python
python计算auc指标实例
Jul 13 Python
浅析Python中的赋值和深浅拷贝
Aug 15 Python
python交互式图形编程实例(二)
Nov 17 Python
python pandas中DataFrame类型数据操作函数的方法
Apr 08 Python
Python类和对象的定义与实际应用案例分析
Dec 27 Python
python实现二级登陆菜单及安装过程
Jun 21 Python
Django 请求Request的具体使用方法
Nov 11 Python
Pandas数据离散化原理及实例解析
Nov 16 Python
Python字符串格式化f-string多种功能实现
May 07 Python
python通过新建环境安装tfx的问题
May 20 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 获取当前访问的url文件名的方法小结
2010/02/08 PHP
PHP读取网页文件内容的实现代码(fopen,curl等)
2011/06/23 PHP
php 深入理解strtotime函数的使用详解
2013/05/23 PHP
PHP批量修改文件名称的方法分析
2017/02/27 PHP
PHP7生产环境队列Beanstalkd用法详解
2020/05/19 PHP
DOM精简教程
2006/10/03 Javascript
js innerHTML 的一些问题的解决方法
2008/06/22 Javascript
获取网站跟路径的javascript代码(站点及虚拟目录)
2009/10/20 Javascript
javascript 文件的同步加载与异步加载实现原理
2012/12/13 Javascript
jQuery实现密保互斥问题解决方案
2013/08/16 Javascript
jQuery判断checkbox是否选中的小例子
2013/12/02 Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
2015/03/03 Javascript
分享javascript实现的冒泡排序代码并优化
2016/06/05 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
Vue.js组件通信之自定义事件详解
2019/10/19 Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
2020/03/04 Javascript
[06:33]3.19 DOTA2发布会 海涛、冷冷、2009见证希望
2014/03/21 DOTA
Python md5与sha1加密算法用法分析
2017/07/14 Python
Python编程实现控制cmd命令行显示颜色的方法示例
2017/08/14 Python
Python中执行存储过程及获取存储过程返回值的方法
2017/10/07 Python
Django中Model的使用方法教程
2018/03/07 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
2018/07/04 Python
在Mac下使用python实现简单的目录树展示方法
2018/11/01 Python
如何爬取通过ajax加载数据的网站
2019/08/15 Python
wxPython实现整点报时
2019/11/18 Python
Python tkinter三种布局实例详解
2020/01/06 Python
Django框架models使用group by详解
2020/03/11 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
巴黎欧莱雅法国官网:L’Oreal Paris
2019/04/30 全球购物
linux面试题参考答案(2)
2015/12/06 面试题
教学大赛获奖感言
2014/01/15 职场文书
《鸿门宴》教学反思
2014/04/22 职场文书
学校师德承诺书
2014/05/23 职场文书
2016思想纪律作风整顿心得体会
2016/01/23 职场文书
Win11运行cmd提示“请求的操作需要提升”的两种解决方法
2022/07/07 数码科技
基于Android10渲染Surface的创建过程
2022/08/14 Java/Android