手把手教你如何入门,如何进阶。
目录
1. 初识爬虫
2. 爬虫四部曲
3. 爬虫初体验
4. requests.get()方法
5. Response 对象的常用属性(代码简写res变量名)
5.1 res.status_code(响应的 HTTP 状态码)
5.2 res.text(响应内容的字符串形式)
5.3 res.encoding(响应内容的编码)
5.4 res.content(响应内容的二进制形式)
练习题
联系我们,一起学Python吧
到底什么是爬虫呢?
爬虫,从本质上来说,就是利用一定的规则的程序在网上拿到对我们有价值的数据。
随着机器学习、人工智能技术的发展,数据越来越重要,需要的数据量也越来越大。而我们可以通过爬虫获取海量的数据,所以爬虫是这一切的源头。
在学完爬虫课之后,你可以自己动手写个爬虫,比如:分析北京各地区的房租情况、自动抢火车票、自动抢演唱会门票、一键下载图片、下载音乐助手、采集疫情数据等等。
第1步:获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。
第2步:解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。
第3步:提取数据。爬虫程序再从中提取出我们需要的数据。
第4步:储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。
这就是爬虫的工作原理,无论之后的学习内容怎样变化,其核心都是爬虫原理。
学习爬虫接触到的第一个模块是:requests。安装方法是:Windows 电脑里叫命令提示符(cmd),输入 pip install requests
即可;在 Mac 电脑里打开终端软件(terminal),输入pip3 install requests
,然后点击enter即可。
这里是 Windows 的安装截图,提示 Successfully 表示安装成功了。
requests
库可以帮我们下载网页源代码、文本、图片,甚至是音频。其实,“下载” 本质上是向服务器发送请求并得到响应。
4. requests
.get()方法import requests
res = requests.get('http://www.baidu.com')
print(type(res))
# 打印变量res的数据类型
#
打印结果这代表着:res是一个对象,属于 requests.models.Response
类。好,既然已经知道res
是一个Response
对象了,我们也就可以去了解它的相应属性和方法了。
import requests
res = requests.get('http://www.baidu.com')
print(res.status_code)
# 200
这里的 200 就是响应的状态码,表示请求成功。当请求失败时会有不同的状态码,不同的状态码有不同的含义,常见的状态码如下:
1.1 1xx(消息,例如:100,继续发出请求)
1.2 2xx(请求成功,例如:200,请求成功)
1.3 3xx(重定向,例如:301,永久重定向)
1.4 4xx(客户端错误,例如:404,找不到资源)
1.5 5xx(服务器错误,例如:503,服务器不可用)
这些状态码只需了解即可,不必全都记住,遇到问题时我们再去查询。
这个属性可以把Response
对象的内容以字符串的形式返回,适用于文字、网页源代码的下载。
import requests
res = requests.get('http://www.baidu.com')
print(res.text)
可以看到获取到了百度的网页源代码,但是中文乱码了,这需要设置一下 Response 对象的编码,看下一节知识点。
编码是信息从一种形式或格式转换为另一种形式的过程,常见的编码方式有 ASCII、GB2312、GBK、UTF-8 等。如果用和文件编码不同的方式去解码,我们就会得到一些乱码。
import requests
res = requests.get('http://www.baidu.com')
res.encoding = 'utf-8' # 设置res对象的编码
print(res.text)
可以看到我们设置了res对象的编码格式为:utf-8,就解决乱码问题了。那么怎么查看数据编码类型呢?
1. 鼠标右键页面。2. 查看网页源代码。3. 源代码最上面的 meta 标签内的 content="text/html;charset=utf-8"。
# 百度源代码中的meta标签
用于图片、音频、视频等二进制内容的获取、下载。
而res.text 用于文本内容的获取、下载。
# 引入requests库
import requests
# 发出请求,并把返回的结果放在变量res中
res = requests.get('https://www.baidu.com/img/bd_logo1.png?where=super')
# 把Reponse对象的内容以二进制数据的形式返回
pic = res.content
# 新建了一个文件baidu.jpg,这里的文件没加路径,它会被保存在程序运行的当前目录下。
# 图片内容需要以二进制wb读写。这个知识点属于基础语法的。
photo = open('baidu.jpg','wb')
# 获取pic的二进制内容
photo.write(pic)
# 关闭文件
photo.close()
百度logo这张图片就下载下来咯。
同学们,先自觉练习,答案在公众号,公众号回复暗号【答案】即可。
1. requests 获取数据的方法是?
A.requests.fetch()
B.requests.http()
C.requests.html()
D.requests.get()
2. 下载视频用到response对象的哪个方法?
A. response.text
B. response.encoding
C. response.content
D. response.status_code
3. 当状态码为多少时,表示请求成功?
A. 100
B. 200
C. 301
D. 403
4. 页面编码类型为 utf-8,如果采集的数据乱码,通常该怎么办?
A. 改变页面编码类型为 gb2312
B. 设置res.encoding = 'utf-8'
C. 设置res.encoding = 'gb2312'
5. 采集网址:http://www.pyfamily.cn/data/test/ 打印数据查看结果。
知识点:res.text 内容以字符串的形式返回。
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。
微信群(关注「Python家庭」一起轻松学Python吧)
QQ 群(983031854)