1.数据的来源
1)用户自行产生
2)去第三方的公司购买数据
3)去免费的数据网站下载数据
4)人工收集数据
5)爬虫获取
2.什么是爬虫
网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟浏览器发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。原则上,只要是浏览器(客户端)能做的事情,爬虫都能够做
3.爬虫的分类
根据被爬网站的数量的不同,我们把爬虫分为:
通用爬虫 :通常指搜索引擎的爬虫(https://www.baidu.com)
聚焦爬虫 :针对特定网站的爬虫
4 . 爬虫的流程
1. url
2. 发送请求获取响应
3. 对响应进行提取
a. 如果提取的是url,就重复步骤2
b. 如果提取的是数据,就保存入库
5. 大象装冰箱分几步
外汇分析师/tupian/20230522/p
爬虫爬取数据的流程和将大象装进冰箱的流程相似:
class 冰箱
属性:门 =
东西s = [大象,]
def open门
class 大象
1.冰箱门打开
冰箱a = 冰箱()
冰箱a.open门()
2.大象放进冰箱
具体再去完善冰箱的大小以及大象放进去的方法
3.冰箱们关上
冰箱a.close门()
6.robots协议
Robots协议:网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,但它仅仅是互联网中的一般约定,可以忽略,例如:(/tupian/20230522/error.html
7.http,和https的概念
复习的必要性:在发送请求,获取响应的过程中 就是发送http或https的请求,获取http或https的响应
HTTP:
超文本传输协议,默认端口号:80
HTTPS:
HTTP + SSL(安全套接字层),即带有安全套接字层的超本文传输协议,默认端口号:443
HTTPS比HTTP更安全,但是性能更低
8.浏览器的工作原理
http请求的过程
1)浏览器先向地址栏中的url发起请求,并获取相应
2)在返回的响应内容(html)中,会带有css、js、图片等url地址,以及ajax代码,浏览器按照响应内容中的顺序依次发送其他的请求,并获取相应的响应
3)浏览器每获取一个响应就对展示出的结果进行添加(加载),js,css等内容会修改页面的内容,js也可以重新发送请求,获取响应
4)从获取第一个响应并在浏览器中展示,直到最终获取全部响应,并在展示的结果中添加内容或修改————这个过程叫做浏览器的渲染
注意:
但是在爬虫中,爬虫只会请求url地址,对应的拿到url地址对应的响应(该响应的内容可以是html,css,js,图片等),浏览器渲染出来的页面和爬虫请求的页面很多时候并不一样,所以在爬虫中,需要以url地址对应的响应为准来进行数据的提取
理解浏览器的工作原理之后,要知道一下俩点:
1)多次响应的结果 就意味着 有多次请求(浏览器最终显示的结果是由多次请求对应的多次响应共同渲染的结果)
2)爬虫是以发送一次请求对应的响应为准,来提取数据2.爬虫是以发送一次请求对应的响应为准,来提取数据
9. 爬虫关注的常见请求头
User-Agent 用户代理
Referer 面包屑
Cookie
http常见请求头:
Host (主机和端口号)
Connection (链接类型)
Upgrade-Insecure-Requests (升级为HTTPS请求)
User-Agent (浏览器名称)
Accept (传输文件类型)
Referer (页面跳转处)
Accept-Encoding(文件编解码格式)
Cookie (Cookie)
x-requested-with :XMLHttpRequest (表示该请求是Ajax异步请求)
10. 爬虫关注的响应头
Set-Cookie 后端一次向客户端set一条cookie
在响应中 可以set多次cookie;客户端最多保存20条cookie
11.响应状态码
200:成功
302:临时转移至新的url
307:临时转移至新的url
404:找不到该页面
500:服务器内部错误
503:服务不可用,一般是被反爬
12.字符串相关的复习
python3中两种字符串类型:
str : unicode的呈现形式
bytes :字节类型,互联网上数据的都是以二进制的方式(字节类型)传输的
关于bytes的拓展阅读:https://segmentfault.com/a/1190000004450876
UTF-8是Unicode的实现方式之一
str和bytes类型的互相转换:
string --> bytes
encode()
bytestring -->str
decode(‘utf8’) # ascii gbk gb2312 iso-8859-1
编码方式解码方式必须一样,否则就会出现乱码
‘你好吗’.encode()–> b’你好吗’
b’你好吗’.decode(‘ascii’) --> 乱码!
b’你好吗’.decode(‘utf8’) --> 正常显示