0.获取数据——爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。
1.解析数据——爬虫程序会把服务器返回的数据解析成我们能读懂的格式。
2.提取数据——爬虫程序再从中提取出我们需要的数据。
3.储存数据——爬虫程序把这些有用的数据保存起来。
requests库可以帮我们下载网页源代码、文本、图片甚至是音频。
“下载”本质上是向服务器发送请求并得到响应。
函数:requests.get()
requests.get(‘URL’)
#requests.get是在调用requests库中的get()方法,它向服务器发送一个请求,括号里的参数是你需要的数据所在的网址,然后服务器对请求作出响应。我们把这个响应返回的结果赋值在变量res上。
#res = requests.get(‘URL’)。res是一个对象,属于requests.models.response类。
属性 作用
response.status_code 检查请求是否成功
response.content 把response对象转换为二进制数据
response.text 把response对象转换为字符串数据
response.encoding 定义response对象的编码
1.response.status_code
print(res.status_code)
#打印变量res的响应状态码,以检查请求是否成功。
#print(变量.status_code)是用来检查请求是否正确响应,如果终端结果显示了200,这个数字代表服务器同意了请求,并返回了数据给我们。
常见响应状态码解释
响应状态码 说明
1xx 请求收到
2xx 请求成功
3xx 重定向
4xx 客户端错误
5xx 服务器端错误
100 继续提出请求
200 成功
305 应使用代理访问
403 禁止访问
503 服务不可用
2.response.content
这个属性能把response对象的内容以二进制数据的形式返回,使用于图片、音频、视频的下载。
eg:
import requests
res = requests.get('https://n1-q.mafengwo.net/s11/M00/FD/32/wKgBEFt70WSAGDenAAQ1h-DCqHc20.jpeg?imageView2%2F2%2Fw%2F680%2Fq%2F90')
#发出请求,并把返回的结果放在变量res中
pic=res.content
#把Reponse对象的内容以二进制数据的形式返回
#把图片、音频、视频转换成二进制的字节进行传输和存储
photo = open('C:/Users/ASUS/Desktop/photo.jpg','wb')
#新建了一个文件photo.jpg,这里的文件加了存储路径,它会被保存在我所设置的桌面上。(如果文件没加路径,它会被保存在程序运行的当前目录下。)
#图片内容需要以二进制wb读写(在学习open()函数时会有接触)
photo.write(pic)
#获取pic的二进制内容
photo.close()
#关闭文件
open()函数中r、rb、w、wb、a、ab
“r”—— 以读方式打开,只能读文件 ,如果文件不存在,会发生异常。
“w”——以写方式打开,只能写文件, 如果文件不存在,创建该文件并写入;如果文件已存在,先清空,再打开文件从头写入。
“a”—— 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
“rb”——以二进制读方式打开,只能读文件 , 如果文件不存在,会发生异常
“wb”——以二进制写方式打开,只能写文件, 如果文件不存在,创建该文件并写入;如果文件已存在,先清空,再打开文件并写入。
“ab”——以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
“r+”——打开一个文件用于读写。文件指针将会放在文件的开头。
“rb+”——以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于**非文本文件如图片等。
“w+”——打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
“wb+”——以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
“a+”——打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于追加。
“ab+”——以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于追加。
3.response.text
这个属性可以把Response对象的内容以字符串的形式返回,适用于文字、网页源代码的下载。
eg:
import requests
#引用requests库
res=requests.get('URL')
novel=res.text
#把Response对象的内容以字符串的形式返回
k = open('《xxxx》.txt','w')
#创建一个名为《xxxx》的txt文档,并写入
k.write(novel)
#写进文件中
k.close()
#关闭文档
4.response.encoding
res.encoding=‘gbk’ #定义Response对象的编码为gbk
目标数据本身是什么编码是未知的。用requests.get()发送请求后,我们会取得一个Response对象,其中,requests库会对数据的编码类型做出自己的判断。但是!这个判断有可能准确,也可能不准确。
如果它判断准确的话,我们打印出来的response.text的内容就是正常的、没有乱码的,那就用不到res.encoding;如果判断不准确,就会出现一堆乱码,那我们就可以去查看目标数据的编码,然后再用res.encoding把编码定义成和目标数据一致的类型即可。