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 相关文章推荐
分享15个最受欢迎的Python开源框架
Jul 13 Python
Python中XlsxWriter模块简介与用法分析
Apr 24 Python
python实现括号匹配的思路详解
Aug 23 Python
python安装requests库的实例代码
Jun 25 Python
python调用webservice接口的实现
Jul 12 Python
python实现输入的数据在地图上生成热力图效果
Dec 06 Python
python程序文件扩展名知识点详解
Feb 27 Python
使用python自动追踪你的快递(物流推送邮箱)
Mar 17 Python
python网络编程socket实现服务端、客户端操作详解
Mar 24 Python
详解用Python调用百度地图正/逆地理编码API
Jul 02 Python
python中如何打包用户自定义模块
Sep 23 Python
Python实现单例模式的5种方法
Jun 15 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四大安全策略
2014/03/12 PHP
PHP多线程类及用法实例
2014/12/03 PHP
php中动态调用函数的方法
2015/03/16 PHP
php自动载入类用法实例分析
2016/06/24 PHP
浅谈php使用curl模拟多线程发送请求
2019/03/08 PHP
PHP 文件写入和读取操作实例详解【必看篇】
2019/11/04 PHP
PHPExcel实现的读取多工作表操作示例
2020/04/14 PHP
PHP生成图表pChart的示例解析
2020/07/31 PHP
基于jquery的无限级联下拉框js插件
2011/10/29 Javascript
jQuery隔行变色与普通JS写法的对比
2013/04/21 Javascript
JS实现可改变列宽的table实例
2013/07/02 Javascript
jquery操作select大全
2014/04/25 Javascript
JS实现可调整倒计时间代码分享
2015/08/18 Javascript
COM组件中调用JavaScript函数详解及实例
2017/02/23 Javascript
jQuery模拟淘宝购物车功能
2017/02/27 Javascript
vue + socket.io实现一个简易聊天室示例代码
2017/03/06 Javascript
vue.js实现左边导航切换右边内容
2019/10/21 Javascript
NodeJS多种创建WebSocket监听的方式(三种)
2020/06/04 NodeJs
用Python中的__slots__缓存资源以节省内存开销的方法
2015/04/02 Python
Python加pyGame实现的简单拼图游戏实例
2015/05/15 Python
关于反爬虫的一些简单总结
2017/12/13 Python
python 通过字符串调用对象属性或方法的实例讲解
2018/04/21 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
python3.x实现base64加密和解密
2019/03/28 Python
Django组件content-type使用方法详解
2019/07/19 Python
python 实现手机自动拨打电话的方法(通话压力测试)
2019/08/08 Python
Python API 操作Hadoop hdfs详解
2020/06/06 Python
python中判断文件结束符的具体方法
2020/08/04 Python
分享29个基于Bootstrap的HTML5响应式网页设计模板
2015/11/19 HTML / CSS
英国奢侈品牌时尚购物平台:Farfetch(支持中文)
2020/02/18 全球购物
妇科医生自荐信
2013/11/05 职场文书
企业行政文员岗位职责
2013/12/03 职场文书
2015年环境监察工作总结
2015/07/23 职场文书
一文搞懂redux在react中的初步用法
2021/06/09 Javascript
Windows安装Anaconda3的方法及使用过程详解
2021/06/11 Python
javascript数组includes、reduce的基本使用
2021/07/02 Javascript