文章目录
上篇
1. 数据分析的一般流程
2. 为什么需要爬虫?
爬虫程序是采集数据的一种方式。
爬虫写得好,juzi进的早。
爬虫写得好,laofan吃的饱。
3. 爬虫的流程(重点)
4. HTTP 请求过程(重点)
HTTP 单次请求过程:
浏览器的渲染过程:
- 浏览器通过域名解析服务器(DNS)获取IP地址
- 浏览器先向IP发起请求,并获取响应
- 在返回的响应内容(html)中,可能会带有css、js、图片等url地址,以及ajax代码,浏览器按照响应内容中的顺序依次发送其他的请求,并获取相应的响应
- 浏览器每获取一个响应就对展示出的结果进行添加(加载),js、css等内容可能会修改页面的内容,js也可以重新发送请求,获取响应
- 从获取第一个响应并在浏览器中展示,直到最终获取全部响应,并在展示的结果中添加内容或修改————这个过程叫做浏览器的渲染
注意:爬虫默认不具备渲染能力,程序让它请求哪个地址,它就只请求那个地址,爬虫提取数据应该以对应请求地址的响应为准。
5. 完整 URL 地址的格式(重点)
https://news.baidu.com/
http://www.chinanews.com/gn/shipin/cns-d/2021/06-30/news893297.shtml
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E4%BC%A0%E6%99%BA&fenlei=256&rsv_pq=a022b40d0004b304&rsv_t=2694IiGer%2F3sERQbCKrfdfhb3mxsAJMY5glCVPCKnYM8CXsrv9o65b3YEiU&rqlang=cn&rsv_enter=0&rsv_dl=tb&rsv_sug3=7&rsv_sug1=9&rsv_sug7=100&rsv_btype=i&inputT=16193&rsv_sug4=16194
http://mp-meiduo-python.itheima.net/
6. HTTP 请求报文格式
请求方式 | 描述 |
---|---|
GET | 请求指定的页面信息,并返回实体主体。 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
DELETE | 请求服务器删除指定的页面。 |
注意:上面四种请求方式中,GET 请求时不能携带请求体
常见请求头:
请求头 | 作用 |
---|---|
Cookie | Cookie状态保持数据 |
User-Agent | 浏览器名称和信息 |
Referer | 页面跳转处 |
7. HTTP 响应报文格式
响应头 | 作用 |
---|---|
Location | 这个头配合302状态码使用,告诉用户端找谁。 |
Set-Cookie | 设置和页面关联的Cookie |
常见的服务器响应状态码:
状态码 | 描述信息 |
---|---|
200 | 请求成功 |
302 | 跳转,重定向,新的url地址会在响应头Location中给出 |
403 | 资源不可用;服务器理解客户的请求,但拒绝处理它(没有权限) |
404 | 找不到页面 |
500 | 服务器内部错误 |
503 | 服务器由于维护或者负载过重未能应答,在响应中可能会携带Retry-After响应头;有可能是因为爬虫频繁访问url,使服务器忽视爬虫的请求,最终返回503响应状态码 |
8. 状态保持机制
Cookie机制:
Session机制:
典型应用:记住用户的登录状态。
下篇
1. 浏览器开发者工具(重点)
浏览器开发者工具:
浏览器无痕浏览模式:
查看第一次请求某个地址时,请求保存中包含的信息和响应时包含的信息。
2. requests 模块简介
requests 是用 python 语言编写的一个开源的HTTP库,可以通过 requests 库编写 python 代码发送网络请求。
# 安装 requests 包
pip install requests
3. requests 模块发送 GET 请求(重点)
4. response 响应内容获取(重点)
response.text和response.content的区别:
response.content
- 返回类型: bytes
- 解码类型: 没有指定,原始响应内容,没有进行解码
- 指定编码方式: response.content.decode(‘指定编码字符集’)
- 注意: response.content.decode() 默认使用 utf-8 编码方式
response.text
- 返回类型: str
- 解码类型: requests 模块自动根据 HTTP 头部对响应的编码作出有根据的推测,推测的文本编码
- response.text = response.content.decode(‘推测出的编码字符集’)
获取响应内容的推荐次序:
- response.content.decode()
- response.content.decode(‘gbk’)
- response.text
以上三种方法从前往后尝试,能够100%的解决所有网页解码的问题,
5. response 响应对象的其他属性
6. 案例-保存网络图片(单张)
7. 案例-保存网络图片(多张)
网页地址:https://www.tupianzj.com/meinv/20210219/224797.html
思路分析:
# ① 先请求 https://www.tupianzj.com/meinv/20210219/224797.html,获取响应内容
# ② 从上一步的响应内容中提取所有图片的地址
# ③ 遍历每一个图片地址,向每个图片地址发送请求,并将响应的内容保存成图片文件
代码实现: