购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.1 urllib模块

在Python 2版本中,有urllib和urlib2两个模块可以用来实现request的发送。而在Python 3中,已经不存在urllib2这个模块了,统一为urllib。urllib模块有如下4个子模块。

(1)urllib. request:可以用来发送request和获取request的结果。

(2)urllib. error:包含了urllib.request产生的异常。

(3)urllib. parse:用来解析和处理URL。

(4)urllib. robotparse:用来解析页面的robots.txt文件。

下面来感受一下urllib的强大之处,以http://httpbin.org/anything为例,将这个网页抓取下来。

【范例2.1-1】urllib的使用(源码路径:ch02/2.1/2.1-1.py)

范例文件2.1-1.py的具体实现代码如下。

【运行结果】

【范例分析】

(1)http://httpbin. org/是一个HTTP的测试工具,http://httpbin.org/anything是返回的这一次的请求信息。

(2)urllib. request.urlopen打开一个URL,也就是发送请求,默认的请求信息如运行结果所示,这里需要注意的是,User-Agent的值默认为Python-urllib/3.5,在爬虫时这样会让对方知道这次请求是一个Python程序,可能会被封禁,所以后续需要指定User-Agent的值为真实浏览器的User-Agent。

(3)urllib. request.urlopen的返回值是一个响应对象response,可以通过read()方法获取响应的所有字节。另外,response还可以获取关于响应的一些其他信息,如响应码status、响应头信息headers。

再来看一个例子,抓取指定关键词的百度贴吧的HTML内容。

【范例2.1-2】爬百度贴吧(源码路径:ch02/2.1/2.1-2.py)

范例文件2.1-2.py的具体实现代码如下。

【运行结果】

【范例分析】

(1)中文在这里需要urllib.parse.urlencode进行URL编码。

(2)request=urllib. request.Request(newurl, headers=headers)表示构造了一个Request的对象,参数有url和headers, headers只设置了一个User-Agent,是为了伪装浏览器的身份。

(3)urllib. request.urlopen表示打开request,发送请求。

(4)response. read().decode('utf-8')表示获取响应内容并解码。

提示

urllib还有很多功能,这里不做过多讲解,直接使用更高级的requests模块。

通过上面的两个案例,已经了解了urllib模块的强大,但是它也有一个缺点,就是代码相对烦琐。能否简化呢?那就需要使用下面讲解的requests模块。 tc7O8Wu/f8ZXxSAQ2UDWjcjwjaKT7rSifkG7FL3R8OL0pH9iXdT0qVXCw7fPdSfD

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开