Ethical Hackers技术教程我用Python

Python爬虫学习(三)urllib进阶使用

2017-08-17  本文已影响656人  弃用中

urllib中包括了四个模块:

上节,我们已经初步试用了urllib,本节再补充一些知识,如果你想更加了解这个库,当然推荐阅读官方文档哦。

在之前内容中,我们只涉及一些相对简单的操作,但是现实操作中,可能会有更高要求的使用,比如Cookies处理,代理设置等等,我们该怎么办呢?

代理设置

爬虫固然很好用,但是一般网站都会采取一些反爬措施,这时候就有必要了解一下代理了,HTTP协议(三)之代理

了解了基本原理后,我们就直接上代码

from urllib.request import ProxyHandler, build_opener

proxy_handler = ProxyHandler({
    'http': 'http://122.72.32.74:80',
})
opener = build_opener(proxy_handler)
response = opener.open('http://www.baidu.com')
print(response.read())

我们在:http://www.xicidaili.com/ 找个可用的代理

代理

然后,使用ProxyHandler生成一个代理处理器,在处理器的基础上新建一个Opener,使用opener的open方法发送一个请求,和之前使用的 urlopen方法类似。

于是,我们同样可以得到:

如果你的IP被某个网站封了,不妨采用这种方法再试试!

Cookies

import http.cookiejar, urllib.request

cookies = http.cookiejar.CookieJar()
handler = urllib.request.HTTPCookieProcessor(cookies)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
for cookie in cookie:
    print(cookie.name + "="+ cookie.value)

首先声明一个CookieJar对象,接下来我们就需要利用HTTPCookieProcessor来构建一个handler,最后利用build_opener()方法构建出opener,执行open()函数。

执行结果如下:

输出了Cookies.

关于urllib.request模块的更多内容,可以查看:https://docs.python.org/3.6/library/urllib.request.html#module-urllib.request

异常处理

URLError

通常引起URLError的原因是:无网络连接(没有到目标服务器的路由)、访问的目标服务器不存在。在这种情况下,异常对象会有reason属性(是一个(错误码、错误原因)的元组)。

import urllib.request
import urllib.error

try:
    response = urllib.request.urlopen('http://nd.com') # 不存在
except urllib.error.URLError as e:
    print(e.reason)
else:
    html = response.read().decode('utf-8')
    print(html)

捕获到了错误:


HTTPError

每一个从服务器返回的HTTP响应都有一个状态码。其中,有的状态码表示服务器不能完成相应的请求,默认的处理程序可以为我们处理一些这样的状态码(如返回的响应是重定向,urllib会自动为我们从重定向后的页面中获取信息)。有些状态码,urllib模块不能帮我们处理,那么urlopen函数就会引起HTTPError异常,其中典型的有404/401。

HTTPError异常的实例有整数类型的code属性,表示服务器返回的错误状态码。

urllib模块默认的处理程序可以处理重定向(状态码是300范围),而且状态码在100-299范围内表示成功。因此,能够引起HTTPError异常的状态码范围是:400-599.

当引起错误时,服务器会返回HTTP错误码和错误页面。你可以将HTTPError实例作为返回页面,这意味着,HTTPError实例不仅有code属性,还有read、geturl、info等方法。

至于urllib.parse模块,推荐大家自己去看。

以上。

上一篇下一篇

猜你喜欢

热点阅读