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使用代理抓取网站图片(多线程)
Mar 14 Python
Python学习笔记_数据排序方法
May 22 Python
Python实现的寻找前5个默尼森数算法示例
Mar 25 Python
Python使用xlwt模块操作Excel的方法详解
Mar 27 Python
如何在python字符串中输入纯粹的{}
Aug 22 Python
python mqtt 客户端的实现代码实例
Sep 25 Python
python实现超市商品销售管理系统
Oct 25 Python
关于ResNeXt网络的pytorch实现
Jan 14 Python
python求最大公约数和最小公倍数的简单方法
Feb 13 Python
Pygame的程序开始示例代码
May 07 Python
python中round函数如何使用
Jun 19 Python
多个版本的python共存时使用pip的正确做法
Oct 26 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使用curl存储cookie的示例
2014/03/31 PHP
PHP统计当前在线用户数实例讲解
2015/10/21 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
2016/08/12 PHP
PHP手机号中间四位用星号*代替显示的实例
2017/06/02 PHP
PHP获取对象属性的三种方法实例分析
2019/01/03 PHP
JAVASCRIPT HashTable
2007/01/22 Javascript
继续学习javascript闭包
2015/12/03 Javascript
JavaScript实现显示函数调用堆栈的方法
2016/04/21 Javascript
JavaScript每天必学之基础知识
2016/09/17 Javascript
JavaScript数据结构链表知识详解
2016/11/21 Javascript
bootstrap 表单验证使用方法
2017/01/11 Javascript
基于JS实现bookstore静态页面的实例代码
2017/02/22 Javascript
Angular2+国际化方案(ngx-translate)的示例代码
2017/08/23 Javascript
React教程之Props验证的具体用法(Props Validation)
2017/09/04 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
2018/01/22 jQuery
Angular 数据请求的实现方法
2018/05/07 Javascript
仿ElementUI实现一个Form表单的实现代码
2019/04/23 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
2019/05/10 Javascript
Node.js安装详细步骤教程(Windows版)详解
2019/09/01 Javascript
JavaScript的console命令使用实例
2019/12/03 Javascript
Javascript查看大图功能代码实现
2020/05/07 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
2015/04/08 Python
插入排序_Python与PHP的实现版(推荐)
2017/05/11 Python
python 通过xml获取测试节点和属性的实例
2018/03/31 Python
对python中使用requests模块参数编码的不同处理方法
2018/05/18 Python
python中将正则过滤的内容输出写入到文件中的实例
2018/10/21 Python
使用python实现男神女神颜值打分系统(推荐)
2019/10/31 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
2020/05/13 Python
Python高阶函数与装饰器函数的深入讲解
2020/11/10 Python
Theo + George官方网站:都柏林时尚品牌
2019/04/08 全球购物
预备党员党校学习自我评价分享
2013/11/12 职场文书
肖申克的救赎观后感
2015/06/02 职场文书
go语言基础 seek光标位置os包的使用
2021/05/09 Golang