爬虫的概述
什么是爬虫?
通过编写程序让其模拟浏览器上网, 然后去互联网中抓取数据的过程
爬虫的分类
1.普通爬虫:
抓取整张页面源码内容
2.聚焦爬虫:
抓取页面中局部的内容
3.增量式爬虫:
可以检测网站中的数据更新情况.抓取网站中最新更新出来的数据.
爬取机制:
反反爬策略:
爬虫的合法性:
爬虫本身是不被法律禁止的(中立性)
爬取数据的违法风险的体现:
1.爬虫干扰了被访问网站的正常运营.
2.爬虫抓取了收到法律保护的特定类型的数据或信息.
如何规避违法的风险:
1.严格遵循网站设置的robots协议
2.在规避爬虫措施的同时,需要优化自己的代码,避免干扰被访问网站的正常运营
3.在使用,传播抓取到的信息时,应审查所抓取的内容,如发现属于用户的个人信息,隐私,或其他商业秘密应及时删除停止使用
一.Anaxonda的安装
1.双击Anaconda3-5.0.0-Windows-x86_64.exe文件
2.下一步
1.打开cmd窗口,录入jupyter notebook指令,
如果没有显示找不到命令且没有报错即可表示安装成功!
2.在开始菜单中显示
3.启动
① 默认端口启动
在终端中输入以下命令:
jupyter notebook
执行命令之后,在终端中将会显示一系列notebook的服务器信息,同时浏览器将会自动启动Jupyter Notebook。
启动过程中终端显示内容如下:
$ jupyter notebook [I 08:58:24.417 NotebookApp] Serving notebooks from local directory: /Users/catherine [I 08:58:24.417 NotebookApp] 0 active kernels [I 08:58:24.417 NotebookApp] The Jupyter Notebook is running at: http://localhost:8888/ [I 08:58:24.417 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
- 注意:之后在Jupyter Notebook的所有操作,都请保持终端不要关闭,因为一旦关闭终端,就会断开与本地服务器的链接,你将无法在Jupyter Notebook中进行其他操作啦。
浏览器地址栏中默认地将会显示:http://localhost:8888
。其中,“localhost”指的是本机,“8888”则是端口号。
URL
如果你同时启动了多个Jupyter Notebook,由于默认端口“8888”被占用,因此地址栏中的数字将从“8888”起,每多启动一个Jupyter Notebook数字就加1,如“8889”、“8890”……
② 指定端口启动
如果你想自定义端口号来启动Jupyter Notebook,可以在终端中输入以下命令:
jupyter notebook --port <port_number>
其中,“<port_number>”是自定义端口号,直接以数字的形式写在命令当中,数字两边不加尖括号“<>”。如:jupyter notebook --port 9999
,即在端口号为“9999”的服务器启动Jupyter Notebook。
③ 启动服务器但不打开浏览器
如果你只是想启动Jupyter Notebook的服务器但不打算立刻进入到主页面,那么就无需立刻启动浏览器。在终端中输入:
jupyter notebook --no-browser
此时,将会在终端显示启动的服务器信息,并在服务器启动之后,显示出打开浏览器页面的链接。当你需要启动浏览器页面时,只需要复制链接,并粘贴在浏览器的地址栏中,轻按回车变转到了你的Jupyter Notebook页面。
例图中由于在完成上面内容时我同时启动了多个Jupyter Notebook,因此显示我的“8888”端口号被占用,最终分配给我的是“8889”。
2. 快捷键
- 向上插入一个cell:a
- 向下插入一个cell:b
- 删除cell:x
- 将code切换成markdown:m
- 将markdown切换成code:y
- 运行cell:shift+enter
- 查看帮助文档:shift+tab
- 自动提示:tab
3. 魔法指令
- 运行外部python源文件:%run xxx.py
- 计算statement的运行时间:%time statement
- 计算statement的平均运行时间:%timeit statement
- 测试多行代码的平均运行时间:
%%timeit
statement1
statement2
statement3
二.HTTP 与HTTPS
1.HTTP协议概念
1.官方概念: HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写, 是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 2.白话概念: HTTP协议就是服务器(Server)和客户端(Client)之间进行数据交互(相互传输数据)的一种形式。
HTTP工作原理
注意事项
- HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。 - HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求, 并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 - HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容, 任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。 - HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。 缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。 另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP之URL
HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。 URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息 URL,全称是UniformResourceLocator, 中文叫统一资源定位符,是互联网上用来标识某一处资源的地址。 以下面这个URL为例,介绍下普通URL的各部分组成:http://www.aspxfans.com:8080/news/index. asp?boardID=5&ID=24618&page=1#name从上面的URL可以看出,一个完整的URL包括以下几部分: - 协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议, 如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符 - 域名部分:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可以使用IP地址作为域名使用 - 端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分, 如果省略端口部分,将采用默认端口 - 虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。 虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/” - 文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”, 则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”, 那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。 文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名 - 锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分 - 参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。 本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数, 参数与参数之间用“&”作为分隔符。
HTTP之Request
报文头:常被叫做请求头,请求头中存储的是该请求的一些主要说明(自我介绍)。服务器据此获取客户端的信息。 常见的请求头: accept:浏览器通过这个头告诉服务器,它所支持的数据类型 Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集 Accept-Encoding:浏览器通过这个头告诉服务器,支持的压缩格式 Accept-Language:浏览器通过这个头告诉服务器,它的语言环境 Host:浏览器通过这个头告诉服务器,想访问哪台主机 If-Modified-Since: 浏览器通过这个头告诉服务器,缓存数据的时间 Referer:浏览器通过这个头告诉服务器,客户机是哪个页面来的 防盗链 Connection:浏览器通过这个头告诉服务器,请求完后是断开链接还是何持链接 X-Requested-With: XMLHttpRequest 代表通过ajax方式进行访问 User-Agent:请求载体的身份标识 报文体:常被叫做请求体,请求体中存储的是将要传输/发送给服务器的数据信息。
HTTP之Response
HTTP的响应状态码由5段组成: 1xx 消息,一般是告诉客户端,请求已经收到了,正在处理,别急... 2xx 处理成功,一般表示:请求收悉、我明白你要的、请求已受理、已经处理完成等信息. 3xx 重定向到其它地方。它让客户端再发起一个请求以完成整个处理。 4xx 处理发生错误,责任在客户端,如客户端的请求一个不存在的资源,客户端未被授权,禁止访问等。 5xx 处理发生错误,责任在服务端,如服务端抛出异常,路由出错,HTTP版本不支持等。
相应头:响应的详情展示 常见的相应头信息: Location: 服务器通过这个头,来告诉浏览器跳到哪里 Server:服务器通过这个头,告诉浏览器服务器的型号 Content-Encoding:服务器通过这个头,告诉浏览器,数据的压缩格式 Content-Length: 服务器通过这个头,告诉浏览器回送数据的长度 Content-Language: 服务器通过这个头,告诉浏览器语言环境 Content-Type:服务器通过这个头,告诉浏览器回送数据的类型 Refresh:服务器通过这个头,告诉浏览器定时刷新 Content-Disposition: 服务器通过这个头,告诉浏览器以下载方式打数据 Transfer-Encoding:服务器通过这个头,告诉浏览器数据是以分块方式回送的 Expires: -1 控制浏览器不要缓存 Cache-Control: no-cache Pragma: no-cache 相应体:根据客户端指定的请求信息,发送给客户端的指定数据
2.HTTPS协议
1.官方概念: HTTPS (Secure Hypertext Transfer Protocol)安全超文本传输协议,
HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。
2.白话概念:
加密安全版的HTTP协议。
加密技术
a.对称秘钥加密(SSL)
缺点:
潜在的危险,一旦被窃听,或者信息被挟持,就有可能破解密钥,而破解其中的信息。
b.非对称秘钥加密技术
缺点:
第一个是:如何保证接收端向发送端发出公开秘钥的时候,发送端确保收到的是预先要发送的,
而不会被挟持。只要是发送密钥,就有可能有被挟持的风险。 第二个是:非对称加密的方式效率比较低,它处理起来更为复杂,通信过程中使用就有一定的效率问题而影响通信速度
c.证书加密机制
1:服务器的开发者携带公开密钥,向数字证书认证机构提出公开密钥的申请,
数字证书认证机构在认清申请者的身份,审核通过以后,会对开发者申请的公开密钥做数字签名,
然后分配这个已签名的公开密钥,并将密钥放在证书里面,绑定在一起
2:服务器将这份数字证书发送给客户端,因为客户端也认可证书机构,客户端可以通过数字证书
中的数字签名来验证公钥的真伪,来确保服务器传过来的公开密钥是真实的。一般情况下,
证书的数字签名是很难被伪造的,这取决于认证机构的公信力。一旦确认信息无误之后,
客户端就会通过公钥对报文进行加密发送,服务器接收到以后用自己的私钥进行解密。