python笔记 爬虫精进·第0课 【初识爬虫,爬虫库requests,requests.get(),status_code,content,encoding】

爬虫四个步骤

获取数据

爬虫程序会根据提供的网址,向服务器发起请求,然后返回数据。

解析数据

爬虫程序把服务器返回的数据解析成我们能读懂的格式。

提取数据

爬虫程序再从中提取出需要的数据。

储存数据

爬虫程序把有用的数据保存起来,便于日后使用和分析。

爬虫库 requests

requests 简介

requests 是一个功能强大、简单易用的 HTTP 请求库,可以使用 pip install requests 命令进行安装

requests 使用

requests.get()的使用

使用示例:

import requests      #引入requests库
res = requests.get('URL')     #requests.get是在调用requests库中的get()方法,它向服务器发送了一个请求,括号里的参数是你需要的数据所在的网址,然后服务器对请求作出了响应。
#我们把这个响应返回的结果赋值在变量res上。

示例1
从某小说网址,下载小说故事

import requests 
#引入requests库
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/sanguo.md') 
#发送请求,并把响应结果赋值在变量res上
Response对象的常用属性

1.get 方法
该方法用于向目标网址发送请求,接收响应
该方法返回一个 Response 对象,其常用的属性和方法列举如下:
response.url:返回请求网站的 URL
【常用属性】response.status_code:检查请求是否成功
【常用属性】response.encoding:定义response对象的编码
response.cookies:返回响应的 Cookie 信息
response.headers:返回响应头
【常用属性】response.content:把response对象转换为二进制数据
【常用属性】response.text:把response对象转换为字符串数据
response.json():返回 dict 类型的响应体,相当于 json.loads(response.text)
2.exceptions 模块
exceptions 是 requests 中负责异常处理的模块,包含下面常见的异常类:
Timeout:请求超时
ConnectionError:网络问题,例如 DNS 故障,拒绝连接等
TooManyRedirects:请求超过配置的最大重定向数
示例应用 response.status_code——用来检查代码是否正确响应

import requests 
res = requests.get('https://res.pandateacher.com/2018-12-18-10-43-07.png') 
print(res.status_code)
#打印变量res的响应状态码,以检查请求是否成功

数据返回200,证明请求成功,其他数据如下:
1xx 请求收到 示例:100 继续提出请求
2xx 请求成功 示例:200 成功
3xx 重定向 示例:300 应使用代理访问
4xx 客户端错误 示例:403 禁止访问
5xx 服务器端错误 示例:503 服务器不可用
示例应用 response.content——用来下载图片、音频、视频
把Response对象的内容以二进制数据的形式返回,适用于图片、音频、视频的下载
如下载某张图片,代码示例

import requests
res = requests.get('https://res.pandateacher.com/2018-12-18-10-43-07.png')
#发出请求,并把返回的结果放在变量res中
pic=res.content
#把Reponse对象的内容以二进制数据的形式返回
photo = open('ppt.jpg','wb')
#新建了一个文件ppt.jpg,这里的文件没加路径,它会被保存在程序运行的当前目录下。
#图片内容需要以二进制wb读写。
photo.write(pic) 
#获取pic的二进制内容
photo.close()
#关闭文件

示例应用 response.text——用来下载文字、网页源代码
把Response对象的内容以字符串的形式返回,适用于文字、网页源代码的下载。
如下载三国演义文章,代码示例

import requests
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/sanguo.md')
#下载《三国演义》第一回,我们得到一个对象,它被命名为res
novel=res.text
#把Response对象的内容以字符串的形式返回
print(novel[:800])
#现在,可以打印小说了,但考虑到整章太长,只输出800字看看就好。

示例应用 response.encoding——用来定义Response对象的编码
定义对象的编码:目标数据本身是什么编码是未知的。用requests.get()发送请求后,我们会取得一个Response对象,其中,requests库会对数据的编码类型做出自己的判断。但是!这个判断有可能准确,也可能不准确。如果判断不准确,就会出现一堆乱码,那我们就可以去查看目标数据的编码,然后再用res.encoding把编码定义成和目标数据一致的类型即可。
应用示例:

res.encoding='gbk' #定义Response对象的编码为gbk
res.encoding='utf-8'  #定义Reponse对象的编码为utf-8

获取文章内容,爬虫,并进行保存到本地

代码如下:

import requests
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/exercise/HTTP%E5%93%8D%E5%BA%94%E7%8A%B6%E6%80%81%E7%A0%81.md')
res.encoding='utf-8'
novel=res.text
file1 = open(r'C:\Users\shibazi\Desktop\scores.txt','w',encoding='utf-8')
file1.write(novel)
file1.close()

你可能感兴趣的:(python学习笔记)