Python 爬虫基础教程-Urllib详解

前言

爬虫也了解了一段时间了希望在半个月的时间内结束它的学习,开启python的新大陆,今天大致总结一下爬虫基础相关的类库---Urllib

Urllib

官方文档地址:https://docs.python.org/3/library/urllib.html

urllib提供了一系列用于操作URL的功能。

Python3中将python2.7的urllib和urllib2两个包合并成了一个urllib库,其主要包括一下模块:

urllib.request 请求模块

urllib.error 异常处理模块

urllib.parse url解析模块

urllib.robotparser robots.txt解析模块

urllib.request

urllib.request.urlopen

13717038-21461bf00146e865.png


通过案例可以看出urlopen,会返回一个二进制的对象,对这个对象进行read()操作可以得到一个包含网页的二进制字符串,然后用decode()解码成一段html代码。

urlopen参数如下:

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

常用参数:

  url:访问的地址,一般不只是地址。

data:此参数为可选字段,特别要注意的是,如果选择,请求变为post传递方式,其中传递的参数需要转为bytes,如果是我们只需要通过urllib.parse.urlencode转换即可:


13717038-b63222172c3b61af.png

timeout:设置网站的访问超时时间

其他参数:

  context 参数:它必须是 ssl.SSLContext 类型,用来指定 SSL 设置。

  cafile 和 capath 两个参数:是指定CA证书和它的路径,这个在请求 HTTPS 链接时会有用。

  cadefault 参数:现在已经弃用了,默认为 False 

urlopen返回对象提供方法:

  read() , readline() ,readlines() , fileno() , close() :对HTTPResponse类型数据进行操作。

  info():返回HTTPMessage对象,表示远程服务器返回的头信息。

  getcode():返回Http状态码。

  geturl():返回请求的url。


13717038-a2aa1b8bf93e496f.png

urllib.request.Request


13717038-6ddb3eef4e2bf72c.png

通过代码我们可以看出urlopen不再是传递url了,而是一个 request。这样一来我们不带把请求独立成一个对象,而且能更加灵活方便的配置访问参数,这是爬虫http必不可少的一步。

Request参数如下:

urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

常用参数:

  url:访问的地址。

data:此参数为可选字段,其中传递的参数需要转为bytes,如果是字典我们只需要通过urllib.parse.urlencode 转换即可:

headers:http相应headers传递的信息,构造方法:headers 参数传递,通过调用 Request 对象的 add_header() 方法来添加请求头。

其他参数:

origin_req_host :指的是请求方的 host 名称或者 IP 地址。

  unverifiable :用来表明这个请求是否是无法验证的,默认是 False 。意思就是说用户没有足够权限来选择接收这个请求的结果。如果没有权限,这时 unverifiable 的值就是 True 。

method :用来指示请求使用的方法,比如 GET , POST , PUT 等

urllib.request.ProxyHandler(ip代理)

以上做些简单的demo是没有问题的,但是如果想让你的爬虫更加强大,那么rulllib.request.ProxyHandler设置代理你一定要知道,网站它会检测某一段时间某个IP 的访问次数,如果访问次数过多,它会禁止你的访问,所以这个时候需要通过设置代理来爬取数据


13717038-d9002f6e77726160.png

以上代码是前段时间写的刷新页面的但是没有达到想要的效果,不过里面有用到request.ProxyHandler({'http':proxy_ip})。其中urllib.request.build_opener() 方法来利用这个处理器构建一个 Opener ,那么这个 Opener 在发送请求的时候就具备了认证功能了。request.install_opener(opener)方法打开链接,就可以完成认证了。

urllib.request.HTTPCookieProcessor(cookie操作)

网站中通过cookie进行判断权限是很常见的。那么我们可以通过urllib.request.HTTPCookieProcessor(cookie) 来操作cookie。使用Cookie和使用代理IP一样,也需要创建一个自己的opener。在HTTP包中,提供了cookiejar模块,用于提供对Cookie的支持。 http.cookiejar功能强大,我们可以利用本模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送,比如可以实现模拟登录功能。该模块主要的对象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。

获取cookie( CookieJar)


13717038-51e01da373b29020.png


13717038-7df95ae024d92fc2.png

保存cookie(MozillaCookieJar)


13717038-f9c91e0f9a540098.png


13717038-befc9e363c8fd2b4.png

使用cookie


13717038-906dd00840dcc8ad.png


13717038-66a1ae4e884f884c.png

其中FileCookieJar、MozillaCookieJar、LWPCookieJar约为保存cookie信息,只是保存格式不同。我们在进行操作cookie时使用对应的格式即可。

urllib.error

用 try-except来捕捉异常,主要的错误方式就两种 URLError(错误信息)和HTTPError(错误编码).


13717038-6672359b0ae65442.png

urllib.parse

urllib.parse.urlparse

将对应的URL解析成六部分,并以元组的数据格式返回来。


13717038-10ac99588c5fbfff.png


13717038-2c6ea190754d47c5.png

参数

result = urlparse('url',scheme='https')解析协议 可以去掉http://

result = urlparse('url',scheme='http')

result = urlparse('url',allow_fragments=False) url带有查询参数

result = urlparse('url',allow_fragments=False) url不带有查询参数

urllib.parse.urlunparse

拼接url


13717038-092d4895700c8b19.png


13717038-2d3442146e7868b7.png

urllib.parse.urljoin

用来拼接url的方法 或者叫组合方法,url必须为一致站点,否则后面参数会覆盖前面的host


13717038-b980f24e77bcff57.png

这个在这个就不过多的介绍了,有兴趣的可以去看资料。

13717038-6b514623b2c0a235.png

转载于:https://www.jianshu.com/p/0301a4559f8a

猜你喜欢

转载自blog.csdn.net/weixin_33762130/article/details/91243019