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 相关文章推荐
详解Django中的ifequal和ifnotequal标签使用
Jul 16 Python
Python输出汉字字库及将文字转换为图片的方法
Jun 04 Python
利用Python写一个爬妹子的爬虫
Jun 08 Python
我们为什么要减少Python中循环的使用
Jul 10 Python
Python 200行代码实现一个滑动验证码过程详解
Jul 11 Python
pygame实现非图片按钮效果
Oct 29 Python
tensorflow的计算图总结
Jan 12 Python
Django使用rest_framework写出API
May 21 Python
Python坐标轴操作及设置代码实例
Jun 04 Python
Python爬虫教程知识点总结
Oct 19 Python
浅谈pytorch中的dropout的概率p
May 27 Python
浅析Python中的随机采样和概率分布
Dec 06 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
Laravel框架表单验证详解
2014/09/04 PHP
php 时间time与日期date之间的使用详解及区别
2016/11/07 PHP
php安装dblib扩展,连接mssql的具体步骤
2017/03/02 PHP
jquery实现居中弹出层代码
2010/08/25 Javascript
JS检测图片大小的实例
2013/08/21 Javascript
JS获取当前日期和时间的简单实例
2013/11/19 Javascript
JS获取URL中参数值(QueryString)的4种方法分享
2014/04/12 Javascript
javascript页面倒计时实例
2015/07/25 Javascript
jquery+json实现分页效果
2016/03/07 Javascript
JavaScript判断数组重复内容的两种方法(推荐)
2016/06/06 Javascript
省市选择的简单实现(基于zepto.js)
2016/06/21 Javascript
原生JS实现图片轮播效果
2016/12/26 Javascript
JavaScript判断浏览器及其版本信息
2017/01/20 Javascript
Node.js 实现远程桌面监控的方法步骤
2019/07/02 Javascript
解决Vue打包后访问图片/图标不显示的问题
2019/07/25 Javascript
在vue中使用echarts(折线图的demo,markline用法)
2020/07/20 Javascript
[14:24]Optic Gaming vs PSG LGD BO3
2018/06/07 DOTA
Python验证码识别处理实例
2015/12/28 Python
详解python中的json的基本使用方法
2016/12/21 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
浅谈python多线程和多线程变量共享问题介绍
2020/04/17 Python
解决python脚本中error: unrecognized arguments: True错误
2020/04/20 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
2020/10/18 Python
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
JDBC操作数据库的基本流程是什么
2014/10/28 面试题
高一家长会邀请函
2014/01/12 职场文书
网上开商店的创业计划书
2014/01/19 职场文书
幼儿园元旦家长感言
2014/02/27 职场文书
员工教育培训协议书
2014/09/27 职场文书
2014年档案管理员工作总结
2014/12/01 职场文书
全民创业工作总结
2015/08/13 职场文书
学习习近平主席讲话心得体会
2016/01/20 职场文书
会计做账心得体会
2016/01/22 职场文书
八年级作文之友情
2019/11/25 职场文书
MySQL时间盲注的五种延时方法实现
2021/05/18 MySQL
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
2022/04/06 Python