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输出9*9乘法表的方法
May 25 Python
python妹子图简单爬虫实例
Jul 07 Python
基python实现多线程网页爬虫
Sep 06 Python
基于python爬虫数据处理(详解)
Jun 10 Python
Python3实战之爬虫抓取网易云音乐的热门评论
Oct 09 Python
python如何派生内置不可变类型并修改实例化行为
Mar 21 Python
python如何求解两数的最大公约数
Sep 27 Python
python实现淘宝秒杀脚本
Jun 23 Python
Python中join()函数多种操作代码实例
Jan 13 Python
使用python实现微信小程序自动签到功能
Apr 27 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
May 20 Python
pytorch 多分类问题,计算百分比操作
Jul 09 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 IP及IP段进行访问限制的代码
2008/12/17 PHP
php $_SERVER["REQUEST_URI"]获取值的通用解决方法
2010/06/21 PHP
JavaScript实现Sleep函数的代码
2007/03/04 Javascript
extjs之去除s.gif的影响
2010/12/25 Javascript
使用apply方法实现javascript中的对象继承
2013/12/16 Javascript
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
JQuery替换DOM节点的方法
2015/06/11 Javascript
javascript解析xml实现省市县三级联动的方法
2015/07/25 Javascript
详解javascript new的运行机制
2016/01/26 Javascript
javascript的列表切换【实现代码】
2016/05/03 Javascript
js获取当前年月日-YYYYmmDD格式的实现代码
2016/06/01 Javascript
深入浅析JavaScript中的Function类型
2016/07/09 Javascript
浅谈jquery高级方法描述与应用
2016/10/04 Javascript
JS字符串统计操作示例【遍历,截取,输出,计算】
2017/03/27 Javascript
基于BootStrap实现简洁注册界面
2017/07/20 Javascript
Thinkphp5微信小程序获取用户信息接口的实例详解
2017/09/26 Javascript
vue中使用ueditor富文本编辑器
2018/02/08 Javascript
vue-lazyload使用总结(推荐)
2018/11/01 Javascript
JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例
2018/12/14 Javascript
Python中有趣在__call__函数
2015/06/21 Python
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
apache部署python程序出现503错误的解决方法
2017/07/24 Python
pandas数值计算与排序方法
2018/04/12 Python
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
python用插值法绘制平滑曲线
2021/02/19 Python
python读取图片颜色值并生成excel像素画的方法实例
2021/02/19 Python
css3一款3D字体带阴影效果的实现步骤
2013/03/20 HTML / CSS
Ajax的优点和缺点
2014/11/21 面试题
公司财务工作总结的自我评价
2013/11/23 职场文书
项目建议书模板
2014/05/12 职场文书
企业授权委托书范本
2014/09/22 职场文书
运动会400米加油稿(8篇)
2014/09/22 职场文书
党的群众路线批评与自我批评范文
2014/10/16 职场文书
2014年租房协议书范本
2014/10/30 职场文书
导游词之北京明十三陵
2019/10/28 职场文书
十大最强格斗系宝可梦,超梦X仅排第十,第二最重格斗礼仪
2022/03/18 日漫