一、URL
域名是由 DNS 解析成 IP 返回给客户端向服务端进行请求访问
- 请求
请求头(包含 url ,包含请求方式)
请求体(为了能够让服务器更认为程序是一个正常的客户端) - 响应
响应头(状态码)
响应体(包含了需要的数据) - http:超文本传输协议
80
- https:安全套接字的超文本传输协议 加密
443
https://www.baidu.com/s?
wd=python&rsv_spt=1&rsv_iqid=0x8ddfbc2a00000675&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&oq=python%25E5%25AE%2598%25E7%25BD%2591&rsv_btype=t&inputT=399&rsv_t=4941eDhjY4FifjTOjM8PuR2DVeu%2Bg2bT%2F8YLJIivZ77r7QJF8Kjq%2BgMiKatxM1NegwMJ&rsv_pq=ca7ee6e60000233c&rsv_sug3=6&rsv_sug1=6&rsv_sug7=100&rsv_sug2=0&rsv_sug4=985&rsv_sug=1
域名后面的 s 是 url 的路由
二、状态码
200:成功
302:服务器要求客户端重定向
400:错误请求,客户端发起的请求不能被服务器所理解
401:请求服务端没有授权
403:服务器成功接收到了请求,但是拒绝了
404:资源找不到
500:服务器错误
三、爬虫流程
- 地址
1. 通过地址发送请求,并且获取响应
2. 响应中有很多内容,需要对响应的数据进行提取
3. 提取到数据之后,需要对数据进行保存(文件,mysql....)
四、代码实现
- requests 库安装
pip install 模块名 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
Requirement already:已经存在了模块
requests:爬虫中基于网络请求的模块,作用:模拟浏览器发起请求
- 请求
import requests
url = 'https://www.baidu.com/' # 不需要手动编写,一般是从浏览器中直接复制粘贴
# 指定发送的是get请求,请求到对应的url中 ,使用requests,需要导包才可以 (alt+enter)
# get方法有返回值,返回的是一个响应对象
res = requests.get(url)
# 如果通过输出看到数据是乱码的,需要对响应对象做一个编码的设置
# 设置什么样的编码,一般都是看浏览器中页面编码;charset=utf-8
res.encoding = 'utf-8'
# print(res) #直接输出Response对象 <Response [200]> 200代表响应成功
# print(res.text) # 调用Response对象的text属性,作用:获取响应文本
- 响应
文本数据:文本数据才需要设置编码方式 ,响应对象.text 响应对象.content 需要进行解码 decode 编码 encode
图片数据:二进制数据 响应对象.content
音频数据:二进制数据 响应对象.content
视频数据:二进制数据 响应对象.content
# url = 'https://img2.baidu.com/it/u=2243573419,589412055&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500'
# r = requests.get(url)
# # 不需要设置编码
# print(r.content) # 如果是图片数据,一定不能使用.text
# 文本数据,能不能用.content
url = 'https://www.baidu.com/'
r = requests.get(url)
# print(r.content) # 字节数据===>字符串数据
# 编码解码
# 把看得懂的数据 --编码-- 》 看不懂的数据
# 看不懂的数据 --解码--》看得懂的数据
print(r.content.decode('utf-8'))
字符串的编码和解码
str = '哈哈哈哈'
# 字符串 ---》 二进制
# 看得懂的数据 --编码-- 》看不懂的数据
a = str.encode()
# 看不懂的数据 --解码-- >看得懂的数据
# b'\xe5\x93\x88\xe5\x93\x88\xe5\x93\x88\xe5\x93\x88' ----》 哈哈哈哈
print(a.decode('utf-8'))