Python自带爬虫库urllib使用大全

Stella981
• 阅读 905

击上方“ Python爬虫与数据挖掘 ”,进行关注

回复“书籍”即可获赠Python从入门到进阶共10本电子书

门前冷落鞍马稀,老大嫁作商人妇。

这篇文章主要来讲解下Python自带的爬虫库urllib常见用法,主要围绕urllib定义、urllib的常用模块和urllib+lxml爬虫案例三个部分进行展开。

一、什么是urllib

它是一个http请求的Python自带的标准库,无需安装,直接可以用。并且提供了如下功能:网页请求、响应获取、代理和cookie设置、异常处理、URL解析,可以说是一个比较强大的模块。

二、urllib模块

可分为以下模块:

urllib.request        请求模块

那么,我们先从第一个模块开始说起吧,首先说一下它的大致用法:

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None) #里面有很多方法,类似与requests模块中的renquest方法

request里包含了很多方法,如果我们要发送一个请求并读取请求内容,最简单的方法就是:

请求格式:

urllib.request.urlopen(url,data,timeout)

url :请求地址

data:请求数据

timeout:请求超时时间

Python自带爬虫库urllib使用大全

这里采用的是get请求,如果想要进行post请求,只需给data方法传参数即可,这里有个问题需要,因为传递参数必须是字节,所以得先编码成bytes才能读取。

Python自带爬虫库urllib使用大全

也可以这样写:

Python自带爬虫库urllib使用大全

通过解析模块先将它解析为byte格式然后读取,同样行之有效,这样就完成了一次post请求。

通过上面例子我们找到了request模块的使用方法,我们使用response.read()获取的是响应体的内容,我们还可以通过response.status、response.getheaders().response.getheader("server"),获取状态码以及头部信息,如果我们要给请求的网址添加头部信息的话了,就要使用urllib.request.Request方法了。

它的用法为:

urllib.request.Request(url,data,headers,timeout,method)

url:请求地址

data:请求数据

headers:请求头

timeout:请求超时时间

method:请求方法,如get post

大致了解下我们可以先来访问下起点网:

from urllib import request, parse

可以看出这是个post请求,因为method设置为post,data传了参数。

这里补充说明下有个urlencode方法,它的作用是将字典转换为url,例子如下:

from urllib.parse import urlencode

添加请求头其实还有一种方法,请看:

from urllib import request, parse

这种添加方式有个好处是自己可以定义一个请求头字典,然后循环进行添加,伪造多个浏览器头。

urllib.request 还可以设置代理,用法如下,

urllib.request.ProxyHandler({'http':'http://fsdfffs.com','https':'https://fsdfwe.com'})

这样就可以避免同一个IP访问网站多次被封的尴尬局面了。

import urllib.request

Python自带爬虫库urllib使用大全

可以看出,由于本人使用无用的IP导致链接错误,所以此时应该处理异常。

Python自带爬虫库urllib使用大全

换了种处理异常的方式,不过总的来说还是比较全面的。异常模块中有两个异常错误:

URLError,HTTPError,其中HTTPError是URLError的子类,URLError 里只有一个属性:reason,即抓异常的时候只能打印错误信息,类似上面的例子。

HTTPError 里有三个属性:code,reason,headers,即抓异常的时候可以获得code,reson,headers三个信息,

import socket

除此之外,它还可以处理cookie数据,不过要借助另一个模块 http。

import http.cookiejar, urllib.request

同时cookie可以写入到文件中保存,有两种方式http.cookiejar.MozillaCookieJar和http.cookiejar.LWPCookieJar(),想用哪种自己决定。

http.cookiejar.MozillaCookieJar()方式

import http.cookiejar, urllib.request

http.cookiejar.LWPCookieJar()方式

import http.cookiejar, urllib.request

如果想要通过获取文件中的cookie获取的话可以通过load方式,它也有两种方式,http.cookiejar.MozillaCookieJar和http.cookiejar.LWPCookieJar(),想用哪种自己决定。

http.cookiejar.MozillaCookieJar()方式

import http.cookiejar, urllib.request

http.cookiejar.LWPCookieJar()方式

import http.cookiejar, urllib.request

urllib parse模块

它是负责解析页面内容,模块下有一个urlparse方法用于拆分解析内容,具体用法如下:

urllib.parse.urlparse(url,scheme)

URL:页面地址

scheme: 协议类型 ,比如 http  https

Python自带爬虫库urllib使用大全

有拆分当然也会有拼接,我们可以看到上面返回的有六个值,所以我们在做拼接时一定要填写六个参数,否则它会报没有足够的值用来解包的错误。

urllib.parse.urlunpars(url,scheme)

Python自带爬虫库urllib使用大全

Python自带爬虫库urllib使用大全

类似的拼接方法其实还有,比如说urljoin,例子如下:

Python自带爬虫库urllib使用大全

urllib.robotparser 它也是一个解析模块,从它的字面意思看,应该是一个机器人解析模块。

而且它还与机器人协议有关联,它的存在就是为了解析每个网站中机器人协议,判断这个网站是否可以抓取。

每个网站中都会有一个robots.txt文件,我们要做的就是先解析它,然后在对要下载的网页数据进行判断是否可以抓取。

Python自带爬虫库urllib使用大全

可以通过直接输入url的方式来判断:

from urllib import robotparser

也可以通过间接设置url的方式来判断:

from urllib import robotparser

三、应用案例:爬取起点小说名

老样子,按下键盘快捷键F12,进行网页分析,这次我们采用lxml,我们得知只需要将这个页面中的某一个部分的数据变动一下就可以抓取到所有数据。如图:

Python自带爬虫库urllib使用大全

下次我们来讲lxml和xpath语法,以便于大家更好的爬取数据,urllib内容就这么多,并不复杂,requests更为简单易学。

最后想学习更多关于Python的知识,可以参考学习网址:http://pdcfighting.com/,点击阅读原文,可以直达噢~

**********---**--****-------------- End **********---**--****--------------

往期精彩文章推荐:

Python自带爬虫库urllib使用大全

欢迎大家点赞,留言,转发,转载,****感谢大家的相伴与支持

想加入Python学习群请在后台回复【入群

万水千山总是情,点个【在看】行不行

/今日留言主题/

随便说一两句吧~~

本文分享自微信公众号 - Python爬虫与数据挖掘(crawler_python)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Irene181 Irene181
3年前
盘点最重要的7个Python库
点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书导读:对于那些对Python数据生态系统不太熟悉的人士,我将简要地介绍一部分重要的库。作者:韦斯·麦金尼(WesMcKinney)译者:徐敬来源:大数据DT(ID:hzdashuju)01NumPyhttp://numpy
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
可莉 可莉
3年前
10行Python代码自动清理电脑内重复文件,解放双手!
点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤世间行乐亦如此,古来万事东流水。!(https://oscimg.oschina.net/oscnet/da5385ecbd59492aa127c14a1a5b807c.jpg)(h
Stella981 Stella981
3年前
Python3 网络爬虫:下载小说的正确姿势
点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤少年心事当拂云。!(https://oscimg.oschina.net/oscnet/09902b71501b9e8c3cb656b5dfbbb0552e0.jpg)1
Wesley13 Wesley13
3年前
5 分钟掌握 Python 中的 Hook 钩子函数
击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤此曲有意无人传,愿随春风寄燕然。!(https://oscimg.oschina.net/oscnet/eb40675fe18343b98502990255057c76.jpg)1
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这