目录
一.爬虫介绍
1.含义:通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程
2.价值:实际应用和就业
- python爬虫程序可用于收集数据。爬虫程序使获取大量数据变得非常简单和快速。由于99%以上的网站是基于模板开发的,使用模板可以快速生成大量布局相同、内容不同的页面。因此,只要为一个页面开发了爬虫程序,爬虫程序也可以对基于同一模板生成的不同页面进行爬取内容。
- 如果你使用爬虫来抓取公司网站上所有产品的销售情况,那么你就可以计算出公司的实际总销售额。如果你抓取所有的评论并对其进行分析,你还可以发现网站是否出现了刷单的情况。
- 刷流量是python爬虫的自带的功能。当一个爬虫访问一个网站时,如果爬虫隐藏得很好,网站无法识别访问来自爬虫,那么它将被视为正常访问。结果,爬虫“不小心”刷了网站的流量;除了刷流量外,还可以参与各种秒杀活动,包括但不限于在各种电商网站上抢商品,优惠券,抢机票和火车票。
- ……
3.爬虫的合法性:
在法律中不被禁止,但爬取数据时具有违法风险(例如:干扰了被访问网站的正常运营;爬取了受到法律保护的特定类型数据和信息)
4.编写爬虫的过程中如何避免违法行为:
- 时常优化程序,避免干扰被访问网站的正确运行
- 使用、传播爬取到的数据时,审查抓取到的内容,如果发现涉及用户隐私、商业机密等敏感内容需要及时停止爬取或传播
二.深入了解爬虫
1.爬虫在使用场景中的分类
- 通用爬虫:搜索引擎抓取系统的重要组成部分,抓取的是一整张页面的数据
- 聚焦爬虫:建立在通用爬虫的基础上,抓取的是页面中特定的局部内容
- 增量式爬虫:检测网站中数据更新的情况,只会抓取网站中最新更新的数据
2.爬虫的矛与盾
比如电商网站,很多电商网站愿意被相关的比价网站或者其他的购物信息网站爬取信息,因为这样能给它们的商品带来更多的流量,但是这些电商网站又不愿意被其他同行的电商网站进行产品描述或者价格信息等数据的爬取,因为它们会担心同行会恶意比价或者抄袭产品描述,然而,这些不愿意被同行爬取商业信息的电商网站又想要爬取同行的商业信息,这就存在矛盾了
如何解决矛盾问题?
- 反爬机制:相关的门户网站可以通过制定相应的策略和技术手段防止爬虫程序进行网站数据的爬取
- 反反爬策略:爬虫程序可以制定相应的策略和技术手段破解门户网站拥有的反爬机制从而获取门户网站中的相关数据
3. robots.txt 协议(反爬机制)
君子协议:遵不遵守协议看个人,robots 协议并没有做强制性限定,但是爬取不被允许爬取的内容有可能要承担相应的法律责任
规定:网站有权利规定网站中可以被爬虫爬取的内容
查看某网站的robots协议:在网址域名后+/robots.txt
三.http&https协议( 超文本传输协议)
1.http协议
(1)概念:服务器和客户端之间进行数据交互的一种形式(服务器和客户端只要遵从了http协议,他们之间就可以进行数据交互)
(2)常用请求头信息:
User-Agent:请求载体的身份标识
Connection:请求完毕后是否断开链接(Connection对应值有两种形式:close, keep alive)
(3)常用响应头信息:
Content-Type:服务器响应回客户端的数据类型(字符串、html类型等)
2.https协议
(1)https中的s表示security,所以https协议可以说是安全的http协议,或者叫做安全的超文本传输协议
(2)http和https协议区别:使用https协议,在服务器和客户端进行数据传输或者数据交互过程中涉及的数据是加密的,而http协议中没有进行数据加密。(https采用的加密是证书密钥加密)
(3)数据加密方式:
- 对称密钥加密:客户端会先将即将发送给服务器端的数据进行数据加密,加密方式由客户端决定,加密完毕后,客户端会将密文包括解密方式(密钥),一起发送给服务器端,服务器端接收到密钥和加密的密文数据后会使用密钥将密文数据进行解密,解密完后服务器端可以得到原文数据,这种叫做对称密钥加密(弊端:在数据传输过程中,密文和密钥可能被第三方机构拦截到)
- 非对称密钥加密:避免密文和密钥同时进行网络传输,可以解决对称密钥加密中存在的安全隐患。服务器端创建公钥后发送给客户器端,客户端使用该加密方式将密文发送给服务器端,服务器端进行解密。服务器端制定的加密方式称为公钥,对客户端发送的密文解密用私钥(弊端:效率低,影响通信速度;服务器端发送给客户端的公钥可能被第三方机构拦截并更改,不能保证客户端收到的公钥是由服务器端创建的)
- 证书密钥加密:可以解决非对称密钥加密中的安全隐患。证书密钥加密中加入了一个证书认证机构的第三方机构。服务器端制定一种加密方式(公钥),将公钥发送给证书认证机构,该机构会对公钥做出审核,审核通过后该机构会对公钥进行数字签名(用于防伪),之后该机构会将已经携带数字签名的公钥封装到证书中,将证书一并发送给客户端,客户端拿到带有数字签名的公钥后,对即将发送给服务器端的数据进行加密,加密后将密文发送给服务器端,服务器端使用私钥对密文解密