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调用java的Webservice示例
Mar 10 Python
Python实现抓取百度搜索结果页的网站标题信息
Jan 22 Python
Linux上安装Python的PIL和Pillow库处理图片的实例教程
Jun 23 Python
python解析基于xml格式的日志文件
Feb 25 Python
python flask中静态文件的管理方法
Mar 20 Python
Python安装lz4-0.10.1遇到的坑
May 20 Python
Python并发之多进程的方法实例代码
Aug 15 Python
浅谈python编译pyc工程--导包问题解决
Mar 20 Python
python中比较两个列表的实例方法
Jul 04 Python
关于windows下Tensorflow和pytorch安装教程
Feb 04 Python
浅谈Keras参数 input_shape、input_dim和input_length用法
Jun 29 Python
python可视化分析绘制带趋势线的散点图和边缘直方图
Jun 25 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的正则处理函数总结分析
2008/06/20 PHP
php 随机生成10位字符代码
2009/03/26 PHP
解析PHP可变函数的经典用法
2013/06/20 PHP
Chrome Web App开发小结
2014/09/04 PHP
php写入、删除与复制文件的方法
2015/06/20 PHP
javascript实现动态CSS换肤技术的脚本
2007/06/29 Javascript
msn上的tab功能Firefox对childNodes处理的一个BUG
2008/01/21 Javascript
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
2010/07/29 Javascript
js检测输入内容全为空格的方法
2014/05/03 Javascript
javascript实现动态表头及表列的展现方法
2015/07/14 Javascript
javascript实现数组去重的多种方法
2016/03/14 Javascript
微信小程序开发(一) 微信登录流程详解
2017/01/11 Javascript
nodejs入门教程一:概念与用法简介
2017/04/24 NodeJs
js删除数组中的元素delete和splice的区别详解
2018/02/03 Javascript
vue和webpack项目构建过程常用的npm命令详解
2018/06/15 Javascript
js计算最大公约数和最小公倍数代码实例
2019/09/11 Javascript
Javascript异步执行不按顺序解决方案
2020/04/30 Javascript
ES6使用新特性Proxy实现的数据绑定功能实例
2020/05/11 Javascript
Element Breadcrumb 面包屑的使用方法
2020/07/26 Javascript
微信小程序调用后台service教程详解
2020/11/06 Javascript
python实现文件分组复制到不同目录的例子
2014/06/04 Python
Python中datetime模块参考手册
2017/01/13 Python
Python操作Excel之xlsx文件
2017/03/24 Python
python导入pandas具体步骤方法
2019/06/23 Python
Python 实现顺序高斯消元法示例
2019/12/09 Python
python Plotly绘图工具的简单使用
2020/03/03 Python
python实现简单学生信息管理系统
2020/04/09 Python
Django Path转换器自定义及正则代码实例
2020/05/29 Python
经济与贸易专业应届生求职信
2013/11/19 职场文书
九年级语文教学反思
2014/02/04 职场文书
巴西世界杯32强口号
2014/06/05 职场文书
小学教师师德师风演讲稿
2014/08/22 职场文书
《索溪峪的野》教学反思
2016/02/19 职场文书
2016年幼儿园万圣节活动总结
2016/04/05 职场文书
goland设置颜色和字体的操作
2021/05/05 Golang
pytorch 权重weight 与 梯度grad 可视化操作
2021/06/05 Python