python网络爬虫开发:技术基础之urllib模块+requests模块

使用爬虫的时候离不开URL地址和下载页面,首先我们就来了解一下URL。它的语法格式一般为:

1
protocol :// hostname[:port] / path / [;parameters][?query]#fragment

URL由三部分组成,第一部分是协议,有http、https、ftp等,第二部分存放资源的服务器的域名或IP地址,第三部分为资源的具体地址。

我们在进行网络请求的时候通常采用三种方式:urllib、urllib3和requests,下面我们就来介绍一下urllib和requests。

1. urllib模块

urllib是Python系统库中存在的一个模块,它提供了多个子模块:

1) urllib.request

提供打开和阅读URL的方法和类

2) urllib.error

包含异常类

3) urllib.parse

解析和引用URL

4) urllib.robotparser

解析robots.txt文件

我们使用最多的是第一个子模块中的方法,其中包含了对服务器请求的发出、跳转、代理等。

当我们向网页发送请求的时候,采用urllib.request.urlopen()方法。

例如:

1
2
3
4
import urllib.request#引入模块
response = urllib.request.urlopen('http://www.baidu.com/')
html = response.read().decode('utf-8')#以utf-8格式读取网页的内容
print(html)#输出内容

输出结果为网页中的内容(html格式):

python爬虫7

它还包含data参数,data参数主要是字节流编码格式的内容,即bytes类型,通过bytes()方法来进行转换。

1
2
3
4
5
import urllib.parse
import urllib.request
data = bytes(urllib.parse.urlencode({'word''hello'}), encoding='utf8')
response = urllib.request.urlopen('http://httpbin.org/post', data=data)
print(response.read())

这个例子传递了一个参数word,它的值为hello,它会被转换为bytes类型,第二个参数为编码格式,我们常选择utf8。data参数有很多功能,这一点在后续会慢慢了解到。

还可以通过timeout参数来设置超时时间,它是直接加在urlopen括号中其余不常用参数就不作过多介绍,有兴趣的可以在Python官方文档中进行查阅。https://docs.python.org/3/library/urllib.request.html

2. requests模块

requests是一种第三方模块,主要用于发送请求,它在使用的时候比urllib模块要简洁方便很多,我们可以在命令操作符里通过pip install requests来安装,也可以在Pycharm中直接进行安装。

python爬虫8

我们可以通过requests模块的get方法打印多种请求信息,代码如下:

1
2
3
4
5
6
7
import requests
= requests.get('https://www.douban.com/')
print(r.status_code)#输出状态码
print(r.encoding)#输出编码格式
print(r.headers)#输出头部文件
print(r.cookies)#输出cookie信息
print(r.content)#输出字节流形式网页源码

输出结果如下:

1
2
418None{'Date''Wed, 19 Feb 2020 10:10:22 GMT''Content-Length''0''Connection''keep-alive',
 'Keep-Alive''timeout=30''Server''dae'}<RequestsCookieJar[]>b''

requests模块也可以使用post、put、delete、hand等来发送请求

3. 总结

本节我们主要介绍了Python发送网络请求的方式,在第一节介绍爬虫流程的时候提到过,发送请求是爬虫操作的关键步骤,但是我们在使用的时候会发现,无论是如何发送请求都会被服务器拒绝,因此我们需要请求headers处理,下一节我们来学习请求headers处理。

THE END