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 相关文章推荐
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
Feb 24 Python
python根据路径导入模块的方法
Sep 30 Python
python万年历实现代码 含运行结果
May 20 Python
Python with语句上下文管理器两种实现方法分析
Feb 09 Python
python3.6使用pymysql连接Mysql数据库
May 25 Python
Python2和Python3中urllib库中urlencode的使用注意事项
Nov 26 Python
使用Python+wxpy 找出微信里把你删除的好友实例
Feb 21 Python
Python常用爬虫代码总结方便查询
Feb 25 Python
python 将字符串中的数字相加求和的实现
Jul 18 Python
详解Python中正则匹配TAB及空格的小技巧
Jul 26 Python
Python单链表原理与实现方法详解
Feb 22 Python
django自定义非主键自增字段类型详解(auto increment field)
Mar 30 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+mysqli实现批量执行插入、更新及删除数据的方法
2015/01/29 PHP
php中smarty实现多模版网站的方法
2015/06/11 PHP
PHP-FPM之Chroot执行环境详解
2015/08/03 PHP
textContent在Firefox下与innerText等效的属性
2007/05/12 Javascript
dojo学习第二天 ajax异步请求之绑定列表
2011/08/29 Javascript
js中document.write使用过程中的一点疑问解答
2014/03/20 Javascript
JavaScript中数据结构与算法(一):栈
2015/06/19 Javascript
谈一谈javascript闭包
2016/01/28 Javascript
AngularJS向后端ASP.NET API控制器上传文件
2016/02/03 Javascript
jQuery快速实现商品数量加减的方法
2017/02/06 Javascript
nodejs中向HTTP响应传送进程的输出
2017/03/19 NodeJs
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
2017/08/09 jQuery
Vue.js 踩坑记之双向绑定
2018/05/03 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
2019/04/10 Javascript
vue拖拽组件 vuedraggable API options实现盒子之间相互拖拽排序
2019/07/08 Javascript
python单链表实现代码实例
2013/11/21 Python
Django1.7+python 2.78+pycharm配置mysql数据库
2016/10/09 Python
Python实现找出数组中第2大数字的方法示例
2018/03/26 Python
python生成1行四列全2矩阵的方法
2018/08/04 Python
Python实现EM算法实例代码
2020/10/04 Python
Mansur Gavriel官网:纽约市的一个设计品牌
2019/05/02 全球购物
英语师范专业毕业生自荐信
2013/09/21 职场文书
新闻网站实习自我鉴定
2013/09/25 职场文书
期末自我鉴定
2014/02/02 职场文书
网络管理员岗位职责
2014/03/17 职场文书
《永远的白衣战士》教学反思
2014/04/25 职场文书
2014单位领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
党的群众路线教育实践活动个人整改措施
2014/10/27 职场文书
总经理助理岗位职责
2015/01/31 职场文书
考勤制度通知
2015/04/25 职场文书
导游词之苏州盘门景区
2019/11/12 职场文书
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
2021/06/26 Java/Android
Java 泛型详解(超详细的java泛型方法解析)
2021/07/02 Java/Android
Redis入门教程详解
2021/08/30 Redis