Python爬虫学习(二)urllib基础使用
在开始urllib库的学习之前,推荐先阅读一下:HTTP协议(一)之HTTP协议详解 这篇文章。
得到网页内容
先上一小段代码:
import urllib.request
html = urllib.request.urlopen('http://www.baidu.com').read().decode('utf-8')
print(html)
运行后的结果如下:

没错,就这么一小段代码,已经可以获得百度首页的内容了,溜不溜?
分析代码
先来分析这一行:
html = urllib.request.urlopen('http://www.baidu.com').read().decode('utf-8')
这一行我们使用了urllib.request
模块中的urlopen
方法,相当于发送了一个Request给服务器,它会返回一个Response对象,然后我们使用了read
方法将内容读出来,可惜它是bytes
类型的数据,于是我们给它解码,即decode
,就变成了编码后的字符串。
如果不解码,会发生什么呢?我们看一下,

什么鬼?可以看到,中文全没了。嘿嘿,大家可以自己尝试查一下原因!
urlopen
一般可以接受三个参数:
urlopen(url, data, timeout)
- 第一个参数url即为URL
- 第二个参数data是访问URL时要传送的数据,默认为None
- 第三个timeout是设置超时时间,默认为 socket._GLOBAL_DEFAULT_TIMEOUT
查看请求头
使用urlopen
方法向服务器发送请求,我们可以查看它的请求头

这个网站相当是一个测试工具,也可以用浏览器访问,查看请求头:

哎哟,这个请求头和浏览器的不一样哦,没关系,这只是默认的请求头,我们可以对它进行更改。
更改请求头
查看文档:https://docs.python.org/3/library/urllib.request.html#urllib.request.Request
我们发现,原来urlopen
方法也会接受一个名为 Request
的类,而这个类可以帮助我们更改请求头。

和用浏览器访问的一摸一样,nice!
使用Get方法访问
我们可以携带一些信息去访问一个网页,比如


网址?
后的那一堆就是我们访问一个网页携带的信息,即Get方法访问,我们同样可以用代码实现:

获得了想要的结果。
使用Post方法访问
如果我们想要用Post方法访问某个网页,可以将数据,放到一个Request
对象中
class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

当然,你也可以使用urlopen
方法,进行Post访问
Post方法更多使用的地方是,比如说登录

现在,你可以自己做一些练习。
以上。
