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程序添加图形化界面的教程
Apr 29 Python
深入浅析Python字符编码
Nov 12 Python
Python中staticmethod和classmethod的作用与区别
Oct 11 Python
python3的输入方式及多组输入方法
Oct 17 Python
3分钟学会一个Python小技巧
Nov 23 Python
python Tcp协议发送和接收信息的例子
Jul 22 Python
python爬虫 模拟登录人人网过程解析
Jul 31 Python
python datetime中strptime用法详解
Aug 29 Python
python config文件的读写操作示例
Sep 27 Python
Python3 获取文件属性的方式(时间、大小等)
Mar 12 Python
python3 配置logging日志类的操作
Apr 08 Python
基于python检查矩阵计算结果
May 21 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引用符&的用法详细解析
2013/08/22 PHP
php启用sphinx全文搜索的实现方法
2014/12/24 PHP
php curl操作API接口类完整示例
2019/05/21 PHP
Laravel框架实现多个视图共享相同数据的方法详解
2019/07/09 PHP
JS中彻底删除JSON对象组成的数组中的元素
2020/09/22 PHP
jquery 指南/入门基础
2007/11/30 Javascript
ASP.NET中使用后端代码注册脚本 生成JQUERY-EASYUI的界面错位的解决方法
2010/06/12 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
2013/07/15 Javascript
使用JavaScript判断图片是否加载完成的三种实现方式
2014/05/04 Javascript
基于javascript实现句子翻牌网页版小游戏
2016/03/23 Javascript
浅析javascript中的Event事件
2016/12/09 Javascript
浅析vue数据绑定
2017/01/17 Javascript
jQuery实现选项卡功能(两种方法)
2017/03/08 Javascript
AngulaJS路由 ui-router 传参实例
2017/04/28 Javascript
Node.js 异步异常的处理与domain模块解析
2017/05/10 Javascript
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
package.json各个属性说明详解
2020/03/11 Javascript
js代码实现轮播图
2020/05/04 Javascript
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
Python中的面向对象编程详解(上)
2015/04/13 Python
python爬虫爬取快手视频多线程下载功能
2018/02/28 Python
解决pycharm 远程调试 上传 helpers 卡住的问题
2019/06/27 Python
python实现批量修改服务器密码的方法
2019/08/13 Python
python实现回旋矩阵方式(旋转矩阵)
2019/12/04 Python
详解Python的爬虫框架 Scrapy
2020/08/03 Python
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
爱他美官方海外旗舰店:Aptamil奶粉
2017/12/22 全球购物
大三在校生电子商务求职信
2013/10/29 职场文书
运动会通讯稿100字
2014/01/31 职场文书
2014年客房部工作总结
2014/11/22 职场文书
会议邀请函
2015/01/30 职场文书
2015年会计工作总结范文
2015/05/26 职场文书
导游词之南京莫愁湖公园
2019/11/13 职场文书
Go Plugins插件的实现方式
2021/08/07 Golang
MySQL 1130异常,无法远程登录解决方案详解
2021/08/23 MySQL