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实现全局变量的两个解决方法
Jul 03 Python
Python基于回溯法子集树模板解决0-1背包问题实例
Sep 02 Python
kaggle+mnist实现手写字体识别
Jul 26 Python
Python实现处理逆波兰表达式示例
Jul 30 Python
python特性语法之遍历、公共方法、引用
Aug 08 Python
Python进阶:生成器 懒人版本的迭代器详解
Jun 29 Python
Django为窗体加上防机器人的验证码功能过程解析
Aug 14 Python
pytorch1.0中torch.nn.Conv2d用法详解
Jan 10 Python
Python图片处理模块PIL操作方法(pillow)
Apr 07 Python
基于Python绘制个人足迹地图
Jun 01 Python
python selenium 获取接口数据的实现
Dec 07 Python
Django使用echarts进行可视化展示的实践
Jun 10 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
Smarty模板学习笔记之Smarty简介
2014/05/20 PHP
简单谈谈PHP中的trait
2017/02/25 PHP
封装好的省市地区联动控件附下载
2007/08/13 Javascript
jQuery Migrate 1.1.0 Released 注意事项
2014/06/14 Javascript
jquery根据属性和index来查找属性值并操作
2014/07/25 Javascript
详解javascript实现自定义事件
2016/01/19 Javascript
高效Web开发的10个jQuery代码片段
2016/07/22 Javascript
15款最好的Bootstrap在线编辑器
2016/08/03 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
JavaScript数据结构之链表的实现
2017/03/19 Javascript
JavaScript实现修改伪类样式
2017/11/27 Javascript
轻量级富文本编辑器wangEditor结合vue使用方法示例
2018/10/10 Javascript
聊聊vue 中的v-on参数问题
2021/01/29 Vue.js
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
Pyramid添加Middleware的方法实例
2013/11/27 Python
python中将正则过滤的内容输出写入到文件中的实例
2018/10/21 Python
CentOS7安装Python3的教程详解
2019/04/10 Python
python中pygame安装过程(超级详细)
2019/08/04 Python
Python跑循环时内存泄露的解决方法
2020/01/13 Python
python数据处理——对pandas进行数据变频或插值实例
2020/04/22 Python
Python3 pywin32模块安装的详细步骤
2020/05/26 Python
基于OpenCV的路面质量检测的实现
2020/11/04 Python
用python发送微信消息
2020/12/21 Python
命名空间(namespace)和程序集(Assembly)有什么区别
2015/09/25 面试题
个人自我鉴定范文
2013/10/04 职场文书
小学生期末评语大全
2014/04/21 职场文书
城管执法人员纪律作风整顿思想汇报
2014/09/13 职场文书
公司新人试用期自我评价
2014/09/17 职场文书
2014年感恩节活动策划方案
2014/10/06 职场文书
委托书英文
2015/01/28 职场文书
幼儿园体操比赛口号
2015/12/25 职场文书
Python爬虫之爬取哔哩哔哩热门视频排行榜
2021/04/28 Python
MongoDB使用场景总结
2022/02/24 MongoDB
漫画《催眠麦克风-Dawn Of Divisions》第二卷PV公开
2022/04/05 日漫
MySQL中order by的执行过程
2022/06/05 MySQL
微前端qiankun改造日渐庞大的项目教程
2022/06/21 Javascript