数据挖掘基本概念
1. 爬虫基础知识
1.1 爬虫的定义
网络爬虫(又被称为网页蜘蛛,网络机器人),就是模拟客户端发送网络请求,接收请求相应,一种按照一定的规则,自动地抓取互联网信息的程序
只要是浏览器能做的事情,原则上,爬虫都能做
1.2 爬虫的更多用途
12306抢票
网站上的投票
短信轰炸
1.3 爬虫的分类
- 通用爬虫:通常指搜索引擎的爬虫
- 是捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。
- 聚焦爬虫:针对特定网站的爬虫
1.4 通用爬虫和聚焦爬虫工作流程
1.5 通用搜索引擎的局限性
- 通用搜索引擎所返回的网页里90%内容无用
- 图片、音频、视频多媒体的内容通用搜索引擎无能为力
- 不同用户搜索的目的不全相同,但是返回内容相同
1.6 ROBOTS协议
Robots协议:网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取
例如:https://www.taobao.com/robots.txt
1.7 总结
- 爬虫的概念
- 爬虫是模拟浏览器发送请求,获取响应
- 爬虫的流程
- url ——>发送请求,获取响应 ——>提取数据 ——> 保存
- 发送请求,获取相应 ——>提取url
爬虫要根据当前url地址对应的响应为准,当前url地址的elements的内容和url的响应不一样
页面上的数据在哪里?
- 当前url地址对应的响应中
- 其他的url地址对应的响应中
- 比如ajax请求中
- js生成的
- 部分数据在响应中
- 全部通过js生成
2. HTTP和HTTPS
2.1 HTTP和HTTPS
- HTTP
- 超文本传输协议
- 默认端口号:80
- HTTPS
- HTTP + SSL(安全套接字层)
- 默认端口号:443
HTTPS比HTTP更安全,但是性能更低
2.2 HTTP的请求过程
浏览器发送HTTP请求的过程
当我们在浏览器中输入一个url后回车,后台会发生什么?比如说你输入https://www.baidu.com
简单来说这段过程发生了以下四个步骤:
查找域名对应的IP地址。
浏览器首先访问的是DNS(Domain Name System,域名系统),dns的主要工作就是把域名转换成相应的IP地址
向IP对应的服务器发送请求。
服务器响应请求,发回网页内容。
浏览器显示网页内容。
浏览器渲染出来的页面和爬虫请求的页面并不一样
2.3 HTTP的请求形式
url的形式
形式:scheme://host[:port#]/path/…/[?query-string][#anchor]
- scheme:协议(例如:http, https, ftp)
- host:服务器的IP地址或者域名
- port:服务器的端口(如果是走协议默认路线,80 or 443)
- path:访问资源的路径
- query-string:参数,发送给http服务器的数据
- anchor:锚(跳转到网页的指定锚点位置 ”#“)
http://localhost:4000/file/part01/1.2.html
http://item.jd.com/11936238.html#product-detail
HTTP请求的形式
常见的请求方法
- GET
- POST
GET方法和POST方法有什么区别?
- Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的
- Get传送的数据量较小,这主要是因为受URL长度限制;Post传送的数据量较大,一般被默认为不受限制
- Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集
- Get执行效率却比Post方法好。Get是form提交的默认方法
方式 | GET | POST |
---|---|---|
外观上 | 在地址上看到传递的参数和值 | 地址栏上看不到数据 |
提交数据大小 | 提交少量数据,不同的浏览器最大值不一样,IE是255个字符 | 提交大量数据,可以通过更改php.ini配置文件来设置post提交数据的最大值 |
安全性 | 低 | 高 |
提交原理 | 提交的数据和数据之间在独立的 | 将提交的数据变成XML格式提交 |
灵活性 | 很灵活,只要有页面的跳转就可以get传递数据 | 不灵活 |
响应状态码
- 200:成功
- 302:临时转移至新的url
- 307:临时转移至新的url
- 404:找不到页面(not found)
- 500:服务器内部错误
3. 字符串回顾
3.1 字符串类型的区别和转化
为什么要掌握 python3 字符串的相关知识
因为当我们模拟浏览器从网页上爬取下数据得到的都是字符串,我们在不断和字符串打交道,具体流程见下图:
3.2 str类型和bytes类型
- bytes:二进制
- 互联网上的数据都是以二进制的方式传输的
- str:unicode的呈现形式
3.3 Unicode UTF8 ASCII的补充
字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等
字符集(Character set)是多个字符的集合
- 字符集包括:ASCII字符集、GB2312字符集、GB18030字符集、Unicode字符集
- ASCII编码是1个字节,而Unicode编码通常是2个字节
- UTF-8是Unicode的实现方式之一,UTF-8它是一种变长的编码方式,可以是1,2,3个字节
3.4 str类型和bytes类型如何互相转化
- str 使用 encode() 方法转化为 bytes
- bytes 通过 decode() 方法转化为 str
- 编码方式解码方式必须一样,否则就会出现乱码