文章目录
初始爬虫
爬虫的工作原理
爬虫可以像浏览器一样向服务器发起请求,拿到服务器返回的数据后,可以根据我们设定的规则去提取需要的数据,数据处理完成后再将数据存储起来。
相当于浏览器
爬虫的三个步骤:
1、获取数据
2、处理数据
3、存储数据
第一步:获取数据,爬虫会根据我们提供的网址,向服务器发起请求获取数据;
第二步:处理数据,对获取的数据进行处理,得到我们需要的部分;
第三步:存储数据,将处理后的数据保存起来,便于后续的使用和分析等。
爬虫中最常用的发起请求的第三方库——requests
requests库
PyCharm安装requests
requests.get() 方法
第一步 获取数据
import requests # 导入 requests 模块
res = requests.get('url') # 发起请求
print(res)
# 输出:<Response [200]>
使用 requests.get(‘网站地址’) 方法向对应的网站发起了请求,然后我们将返回的结果存到了变量 res 中供后续使用。它的类型是 Response 对象,后面的 200 是状态码
通过 requests.get() 方法获取到了网页的数据,作为 Response 对象存到了变量 res
Response 对象的常用属性:
属性 含义
res.status_code 响应的 HTTP 状态码
res.text 响应内容的字符串形式
res.content 响应内容的二进制形式
res.encoding 响应内容的编码
res.status_code
import requests
res = requests.get('url')
print(res)
输出:<Response [200]>
这里的 200 就是响应的状态码,表示请求成功。当请求失败时会有不同的状态码,不同的状态码有不同的含义
响应状态码 含义 例子 含义
1xx 消息 100 继续发出请求
2xx 请求成功 200 请求成功
3xx 重定向 301 永久重定向
4xx 客户端错误 404 找不到资源
5xx 服务器错误 503 服务不可用
res.text
res.text 返回的是服务器响应内容的字符串形式,也就是文本内容。
import request
res = request.get('url')
print(res.text)
例子:
import requests
# 获取小说数据
res = requests.get('url') #小说的网址
# 以写入的方式打开一个名为小说的 txt 文档
with open('小说.txt','w') as file:
#将数据的字符串形式写入文件中
file.write(res.text)
涉及到文件操作。
open() 函数是 Python 中的内置函数,用于打开文件,返回值是一个 file 对象。
open() 函数接收的第一个参数为文件名,第二个参数为文件打开模式。打开模式默认为 r,是 read 的缩写,表示只读模式。即只能读取内容,不能修改内容。
常用的打开模式有 w(write,只写模式)、b(binary,二进制模式)和 a(append,追加模式,表示在文件末尾写入内容,不会从头开始覆盖原文件)。
Tips:在 w 和 a 模式下,如果你打开的文件不存在,那么 open() 函数会自动帮你创建一个。
这些打开模式还能两两组合,比如:rb 表示以二进制格式打开文件用于读取,wb 表示以二进制格式打开文件用于写入,ab 表示以二进制格式打开文件用于追加写入。
注意:使用 open() 函数打开文件,操作完毕后,最后一定要调用 file 对象的 close() 方法关闭该文件。
#读取文件
file = open('文本.txt') # 打开模式默认为 r,可省略
print(file.read()) # 调用 read() 方法读取文件内容
file.close() # 关闭文件
#写入文件
file = open('文本.txt','w') # 写入模式
file.write('hello world!') #调用 write() 方法写入内容
file.close() # 关闭文件
为了避免忘记调用 close() 方法关闭文件,导致资源占用、文件内容丢失等问题,推荐使用 with … as … 语法,它在最后会自动帮你关闭文件。
import requests
# 获取小说数据
res = requests.get('url') #小说网址
# 以写入的方式打开一个名为小说的 txt 文档
with open('小说.txt', 'w') as file:
# 将数据的字符串形式写入文件中
file.write(res.text)
获取到网页的响应后,以写入模式打开一个名为 小说.txt 的文件,然后调用 write() 方法将响应内容的字符串形式写入到文件中,实现了小说的下载。同理,所有文本内容都可以通过这种方式进行下载,只需将 res.text 写入到文件当中保存即可。
res.content
除了文本内容的下载,爬虫还能下载图片、音频、视频等。
import requests
#获取图片数据
res = requests.get('url') #图片网页
#以二进制写入的方式打开一个名为 photo.jpg 的文件
with open('photo.jpg','wb') as file:
file.write(res.content)
和下载小说的步骤几乎一样。区别在于图片是用二进制写入的方式,将数据的二进制形式写入文件当中,而不是字符串形式。
res.text 和 res.content 的区别是:res.text 用于文本内容的获取、下载,res.content 用于图片、音频、视频等二进制内容的获取、下载。
res.encoding
res.encoding 就是爬虫获取到数据的编码格式,requests库会根据内容推测编码格式是什么,然后将res.encoding设成推测的格式,在访问res.text时使用该格式解码。
通过手动设置编码格式的方式解码乱码的问题。
import requests
res = requests.get('url')
res.encoding = 'utf-8'
print(res.text)