标签: wps的的官网下载地方

  • wps的电脑版下载地址

      一、企业区块链的需求

      区块链是一种真正颠覆性的技术,能给业务网络带来变革。这一创新需要以开放的方式与其他科技公司及行业协作进行。

      企业级区块链技术具有以下特征:

      1. 共享的许可制账本 (Shared,Permissioned Ledger) 是仅可附加的记录系统 (SOR) 和单一事实来源。它对业务网络的所有参与成员均可见。

      2. 共识协议 (Consensus Protocol) 是业务网络的所有参与成员都赞同的协议,wps的免费版的下载入口的方法可确保仅使用经过网络验证的交易来更新账本。

      3. 加密 (Crytography) 可确保交易的防篡改安全性、身份验证和完整性。

      4. 智能合约 (Smart Contract) 封装了在网络上发生的交易的参与者协议条款;它们存储在区块链中的验证节点上并通过交易触发。

      5. 除了这些属性之外,企业区块链技术还需要支持关键的行业要求,比如性能、经过验证的身份,以及私下和机密的交易。Hyperledger Fabric 就是为满足这些需求而设计的。它还设计了一种可插拔的共识协议,允许企业为其网络选择最佳算法。

      二、主流区块链技术简介

      1、比特币

      比特币是wps的官网最新的下载的地方在哪里领域的领头羊,是区块链技术的第一个、也是最成功的应用。专业人士对于比特币的看法呈现明显的两极分化,而比特币的市值却一路攀升。从企业实施区块链项目的角度,比特币的wps的官网最新的下载的地方在哪里属性都及其明显。笔者认为比特币本身如下特点决定了比特币的技术架构并不能很好的满足企业对于商业应用的需求:

      1. 匿名,反监管。在任何一个商业网络内,匿名都是不可接受的;对任何一个政府而言,监管都是必须的。

      2. 工作量证明的共识算法。这种算法对企业应用来说是一种巨大的资源浪费。

      3. 智能合约缺失。比特币只能处理很简单的脚本,并不具备图灵完备的智能合约执行能力,因此除了能很好的实现wps的官网最新的下载的地方在哪里的属性,很难胜任其他更加复杂的商业逻辑。

      因此笔者不推荐用比特币作为企业区块链的技术框架, 除非贵司的应用是一款纯粹的wps的官网最新的下载的地方在哪里。

      2、以太坊

      根据以太坊官方的宣称,以太坊(Ethereum)目标是打造成一个运行智能合约的去中心化平台(Platform for Smart Contract) ,平台上的应用按程序设定运行,不存在停机、审查、欺诈、第三方人为干预的可能wps的的官网下载地方。以太坊平台由Golang、C++、Python 等多种编程语言实现。当然,为了打造这个平台,以太坊提供了一条公开的区块链,并制定了面向智能合约的一套编程语言。 智能合约开发者可以在其上使用官方提供的工具来开发支持以太坊区块链协议的应用(即所谓的 DAPP) 。

      以太坊区块链的特点主要包括:

      1)  单独为智能合约指定编程语言 Solidity;
    wps office的免费版的下载网址怎么找
      2)  使用了内存需求较高的哈希函数:避免出现算力矿机;

      3)  uncle 块激励机制:降低矿池的优势,减少区块产生间隔为 15 秒;

      4)  难度调整算法:一定的自动反馈机制;

     wps office免费版下载入口 5)  gas 限制调整算法:限制代码执行指令数,避免循环攻击;

      6)  记录当前状态的哈希树的根哈希值到区块:某些情形下实现轻量级客户端;

      7)  为执行智能合约而设计的简化的虚拟机 EVM。

      以太坊的核心概念:

      1)  EVM:以太坊虚拟机,轻量级虚拟机环境,是以太坊中智能合约的运行环境。

      2)  Account:账户,分两类:合约账户存储执行的合约代码;外部账户为以太币拥有者账户,对应到某公钥。

      3)  Transaction:交易,从一个账户到另一个账户的消息,包括以太币或者合约执行参数。

      4)  Gas:燃料,每执行一条合约指令会消耗一定的燃料,当某个交易还未执行结束,而燃料消耗完时,合约执行终止并回滚状态。

      共识算法: 目前采用了 PoW 作为一致达成保证,未来可能迁移到 PoS 上。

      降低攻击: 设计核心思想是通过经济激励机制防止少数人作恶。所有交易都要提供交易费用,避免 DDoS 攻击;程序运行指令数通过 gas 来限制,所消耗的费用超过设定上限时会被取消,避免恶意合约。

      提高扩展性: 以太坊未来希望通过分片机制可以提高整个网络的扩展性。分片之前整个网络的处理取决于单个节点的处理能力。分片后,只有同一片内的处理是同步的、一致的,不同分片之间则可以是异步的。

      以太坊是一家以经营公有链为主的企业, 其公有链的性质导致其交易的效率偏低, 由于其缺乏用户身份和权限管理的机制,导致其在企业应用中受到诸多限制。

      以太坊企业联盟 EEA 与 2017 年成立,目前仍缺乏有效的信息披露。

      3、超级账本

      Hyperledger 项目是首个面向企业的开放区块链技术的重要探索。在 Linux 基金会的支持下,吸引了包括 IBM、Intel、摩根等在内的众多科技和金融巨头的参与。

      2015 年 12 月,开源世界的旗舰——Linux 基金 会牵头,联合 30 家初始企业成员(包括IBM、Accenture、Intel、J.P.Morgan、R3、DAH、DTCC、FUJITSU、HITACHI、SWIFT、Cisco 等) ,共同 宣告 了 Hyperledger 项目的成立。该项目试图打造一个透明、公开、去中心化的分布式账本项目, 作为区块链技术的开源规范和标准, 让更多的应用能更容易的建立在区块链技术之上。项目官方信息网站在 hyperledger.org,目前已经有超过 200 家全球知名企业和机构(大部分均为各自行业的领导者)宣布加入 Hyperledger 项目,其中包括40 余家来自中国本土的企业,包括百度,万达,小米,招商银行,中信,浙江大学,中国银钞造币等国内知名机构。

      如果说以比特币为代表的货币区块链技术为 1.0, 以以太坊为代表的合同区块链技术为 2.0,那么实现了完备的权限控制和安全保障的 Hyperledger 项目毫无疑问代表着 3.0 时代的到来。

      IBM 贡献了数万行已有的 Open Blockchain 代码,Digital Asset 则贡献了企业和开发者相关资源,R3 贡献了新的金融交易架构,Intel 也贡献了跟分布式账本相关的代码。

      Hyperledger 社区由技术委员会(Technical Steering Committee,TSC)指导,首任主席由来自 IBM 开源技术部 CTO 的 Chris Ferris 担任,管理组主席则由来自 Digital Asset Holdings 的 CEO Blythe Masters 担任。另外,自 2016 年 5 月起,Apache 基金会创始人Brian Behlendorf 担任超级账本项目的首位执行董事。

      该项目的出现,实际上宣布区块链技术已经不再是仅面向“社会实验”性质的应用场景,它已经正式被主流机构和企业市场认可; 同时, Hyperledger 首次提出和实现的完备权限管理、创新的一致性算法和可拔插、 可扩展的框架, 对于区块链相关技术和产业的发展都将产生深远的影响。

      Hyperledger Fabric 区块链架构的显著特点是:

      1. 具备身份识别和权限控制

      2. 可插拔的共识算法和数据存储设计

      3. 智能合约支持多种编程语言

      4. 交易通道保证只有交易相关方才能看到交易内容

      4、Ripple

      Ripple 是世界上第一个开放的支付网络,通过这个支付网络可以转账任意一种货币,包括美元、欧元、人民币、日元或者比特币,简便易行快捷,交易确认在几秒以内完成,交易费用几乎是零,没有所谓的跨行异地以及跨国支付费用。

      Ripple 是开放源码的点到点支付网络,它可以使你轻松、廉价并安全的把你的金钱转账到互联网上的任何一个人,无论他在世界的哪个地方。因为 Ripple 是 p2p 软件,没有任何个人、公司,或政府操控,任何人可以创建一个 ripple 账户。wps电脑版下载的入口

      新版 Ripple 引入两个措施解决孤立小圈子的问题:其一是推出 Ripple 币——XRP,它作为 Ripple 网络的基础货币,就像比特币一样可以整个网络中流通,而不必局限于熟人圈子;其二是引入网关(Gateway)系统,它类似于货币兑换机构,允许人们把法定货币注入、抽离 Ripple 网络,并可充当借、贷双方的桥梁。

      Ripple 的一个主要特点是去中心化,它需要维护一个包含所有帐号、所有交易(因此也就是所有账户余额)的总帐本,这个总帐本分布在所有网络节点中并时刻保持同步。其核心机制与比特币类似,但也存在以下重要区别:

      1)Ripple 网络支持多种货币。除了自己的 Ripple 币,它还支持法定货币(例如美元、欧元、日元等),并打算在 2013 年 4 月 19 日前后支持比特币,未来有可能支持所有WPS office的电脑版的下载网站怎么找。

      2)Ripple 网wps office 官方的下载的入口(wps office下载不了怎么办)络自动进行汇率换算。也就是说,用户可以用任何一种类型的货币向他人支付另外任何一种类型的货币,从而实现所有货币的全网流通。

      3)Ripple 的交易确认过程可在几秒钟之内完成。Ripple 引入了一个“共识(Consensus)”机制,通过特殊节点的投票,在很短的时间内就能够对交易进行验证和确认。

      4)Ripple 客户端不需要下载区块链,它在普通节点上舍弃掉已经验证过的总帐本链,只保留最近的已验证总帐本和一个指向历史总帐本的链接,因而同步和下载总帐本的工作量很小。

      5)Ripple 无需也不能挖矿。

      6)Ripple 币的总量非常不能增加,而且只能递减。该公司已经创造出了 1000 亿个单位的 Ripple 币,计划最终向外发行 75%的 Ripple 货币供应,并承诺永不增发。用户在进行每次交易时要花费一定的 Ripple 币(金额非常非常低,大约是 1/1000 美分),这个交易费不交给任何人,只是凭空消失。因此 Ripple 币只会越来越少,但减少的速度非常慢。

      对比比特币我们可以发现,Ripple 网络的功能远远超出了比特币,它包括:

      1)现实与WPS office的电脑版的下载网站怎么找的双向流通;

      2)多币种的 P2P 兑换与支付;

      3)P2P 网络信贷;

      4)个人网络清算。

      这四个功能结合起来,已经构成了一个基本完整的、去中心化的、全货币的金融体系。如此雄大的野心,应来源于公司领导层对于金融与科技行业的丰富经验与激进规划。

      在这一雄心勃勃的规划之下,未来的网络金融体系已经呼之欲出,这或许是风投机构拥抱OpenCoin wps官网最新的下载的入口在哪 公司的一个主要原因。另一个主要原因据信来源于对 250 亿个 Ripple 币的觊觎——OpenCoin 将保留 25%的 Ripple 币以便调节 Ripple 网络。

      显然,为了与支付巨头竞争,一个企业必须建立自己的全球支付系统,并且要和数百家银行建立合作伙伴关,还要应付外汇风险和在各地成立代理机构。相比而言,Ripple 建立了一个共享的、免费的、在全球任何地方任何时候都可使用的支付网络。由于 Ripple的存在,人们在进行全球交易时便没有必要去涉足外汇市场了,因为 Ripple 的内在机制已经支持外汇兑换了。同样,人们也不需要一个跨国的金融机构来完成金融支付,你只需要一个简单的支付入口就能完成一切。

      5、技术选型要点

      下面表格简单对比了比特币,以太坊和超级账本的某些技术特性。从企业应用的角度而言,这些因素都是选型中必须考虑的因素。

      主流区块链技术比较及平台选择分析_java

      下图从技术的成熟度和影响力的角度对比了主要的区块链底层技术。 从图中可以看出, 在私有链, 公有链和联盟链等不同领域都有核心玩家。 而在云服务领域只有非常少数的服务提供商并且很少有商用的案例。开源项目中玩家较多,其中以超级账本影响力最大,以太坊试图跨越公有链的壁垒进度企业级联盟链市场,不过鉴于 EEA 成立时间较短,超级账本在企业级联盟链场景家仍是最佳选择。

      主流区块链技术比较及平台选择分析_java_02

      三、公有链 ,私有链还是联盟链

      创新式区块链技术的出现和成熟,让产业内开始将焦点放至区块链技术其本身。 从区块链的部署方式来说,一般会分为公有链,私有链和联盟链三种形式。

      公有链:世界上所有人都可以阅读和发送交易。如果他们合法都有希望看到自己被包括在内。世界上任何人都能参与到共识形成过程——决定在链条上添加什么区块以及现状是怎样的。作为中心化或准中心化信任的替代品,公有链受加密经济的保护,加密经济是经济激励和加密图形验证的结合,用类似工作量证明或权益证明的机制,遵循的总原则是人们影响共识形成的程度和他们能够影响的经济资源数量成正比。这类区块链通常被认为是”完全去中心化”。

      联盟链:共识形成过程由预先选择的一系列的节点所掌控,例如,设想一个有 15 个金融机构的团体,每个机构都操作一个节点,为了使区块生效,其中的 10 个必须签署那个区块。阅读区块链的权利可能是公开的,或仅限于参与者,也有混合的路径,比如区块的根散表和应用程序编程接口一起公开,使公共成员可以进行一定量的查询,重获一部分区块链状态的加密图形证明。这类区块链被认为是”部分去中心化”,一般 采取多中心式 ,参与成员是预先根据一定特征所设定的(比如说,各券商的策略分析师)。联盟链容易进行控制权限设定,拥有更高的应用可扩展性,对于产业内(例如各券商)或跨国家同联盟机构的交易、清算、 结算、审计等都有很大的应用价值。

      私有链: 书写许可对一个组织保持中心化。 阅读许可可能是公开的或者限制在任意程度。应用很可能包含对单个公司内部的数据库管理,审查等,因此公共的可读性在很多情况下根本不必要,但在另一些情况下人们又想要公共可读性。 私有链没有去中心,但具有分布式特点。 中心控制者指定可以参与和进行交易验证成员的范围。私有链对于公司政府内部的审计和测试有很大的价值。

      从企业应用的角度来看,完全去中心化和没有准入门槛的公有链并不合适,至少在现代商业社和企业还是会慎重选择和哪些合作伙伴来做生意,而不是在互联网上随便找几个并不熟悉的公司;私有链适合企业内部跨部门协作, 这种方式和传统的应用在部署架构上并不存在明显区别, 但应用设计上会遵循去中心化的设计。联盟链是目前比较适合企业间商业网络进行合作的模式,也是讨论最多的区块链形式。联盟链的形成过程是循序渐进的,一般会由一个或少数具有业务统治力的企业发起,逐渐扩大范围和行业影响力, 从而形成一个较大的联盟; 这个过程和真实商业网络中商业联盟的形成非常类似。 在部署方式上, 联盟的发起人一般对整个网络的核心节点负责,其他成员根据商业协议适当部署区块链节点进行记账和背书,因此联盟链的部署方式一般会采用逻辑分散, 少数物理集中的多中心架构; 这样的架构也更符合真实商业网络的情况,毕竟不是所有的企业都有能力去自建数据中心并负担其成本。

      四、云平台还是私有平台

      目前,许多云平台服务提供商都在自己的云平台推出了区块链云服务。就目前市场上存在的区块链云服务平台来看, 仍不具备大规模部署生产环境的能力。这既是因为区块链技术仍处于早期发展阶段,大部分 BaaS 平台仅停留在 PaaS 层面,不具备提供应用场景 SaaS 的能力;而对很多企业而言如何使用这种技术恰恰是面临的最大问题,平台的意义并不大; 另外一个原因是企业对敏感数据保存在云端仍然比较抗拒, 对大多数的大中型企业而言,自建平台仍是首选。而区块链项目往往是作为内部创新或者技术突围的试点,将平台留在内部仍是最佳选择。

      然而对一个大型企业内部而言, 或是对一个成型的商业联盟而言, 区块链未来更应该成为基础设施的一部分,就像今天用云计算来提供计算、存储和网络资源一样,区块链网络也会作为一种资源提供出来, 为需要利用区块链技术的应用提供基础架构。 这包括了区块链运行的载体(虚拟机或容器)以及区块链网络的基础架构(共享账本,区块链网络,共识算法,安全机制等) 。从这个角度来说,企业内部构建一个区块链云平台的需求仍是巨大的。

      主流区块链技术比较及平台选择分析_java_03

      主流区块链技术比较及平台选择分析_java_04

      五、去中心化系统架构的误区

      区块链是一种“去中心化的”技术,在理解去中心化的含义的时候很容易进入一个误区,即认为去中心化等于分布式。

      去中心化而相对于传统应用中心化架构而言, 是指在区块链网络中没有中心化的节点和机构, 区块链网络中的节点是平等的。 其根本含义是指网络中不存在中心化节点和机构, 即是说任何机构和节点都不能操纵区块链网络的行为, 整个网络的行为是由网络中全体成员决定。这样的网络特性,和真正的物理节点分布没有必然联系。

      很多人一谈到去中心化,就想到要把各个节点物理分散,认为这样的架构才是去中心化的,而实际上,现存的所有中心化应用如银行,政府和垄断企业的系统,也都是分散在不同的物理节点上的, 物理节点的分散并不能说明系统是去中心化的。

      去中心化的本质是系统架构和应用架构在设计的时候就按照去中心化的目标去设计, 应用程序的逻辑必须是按照去中心化的思路去实现。一个中心化的应用,不管分散到多少个物理节点上始终还是中心化的应用;而一个去中心化的应用,即使都运行在一台服务器上,本质还是去中心化的。

      另外需要注意的是, 即使是比特币这样所谓的完全去中心的公有链, 也难逃逐渐中心化的趋势,例如比特币核心开发组 Core,国内具有垄断地位的矿池,以及大型的中心化的交易中心等等, 这些组织或者机构都在某种程度上是中心化的; 中心化可以说是利益在分配过程中不可避免的趋势。 对企业区块链应用而言, 完全的平等和对等也是不现实的。 因此商业规则,才是组织区块链网络的核心,只要成员都认可这种规则,就是合理的、可以操作模式。合理的利益分配永远是商业能够继续下去的原动力, 没有企业喜欢绝对的平等, 也没有企业不喜欢垄断。区块链对联盟内部可能是民主的,对联盟外部仍需垄断,这是由资本的逐利性决定的。而一味追求去中心和平等,只会使商业网络越来越复杂而难以为继。

  • wps的电脑版的下载的入口在哪

      本文为马士兵教育《Python网络爬虫进阶指南》课程笔记,部分内容由AI生成。课件:第一章,第二章,第三章,第四章,第五章,第六章,第七章,第九章,第十章。

      1.1浏览器工作原理

      HTTP官方文档

        浏览器是我们在日常网络活动中经常使用的工具,它允许我们浏览网页、查找信息、与网站进行交互等。浏览器的工作原理涉及多个组件和过程,如下所示:

      用户界面(User Interface)

      这是浏览器的外观,包括地址栏、后退/前进按钮、书签、标签页等。用户界面提供了与浏览器交互的方式。浏览器引擎(Browser Engine)

      这是浏览器的核心部分,负责解释和执行用户界面和呈现引擎之间的命令。它处理用户输入,将其转化为请求,并与呈现引擎协调,以展示所需的内容。呈现引擎(Rendering Engine)

      这是浏览器的另一个核心部分,负责显示请求的内容。它将HTML和CSS解释成可视化的页面。不同的浏览器使用不同的呈现引擎,例如Chrome使用Blink引擎,Firefox使用Gecko引擎。网络组件(Networking)

      这部分负责网络通信,从互联网下载页面和资源。浏览器通过HTTP请求从服务器获取HTML、CSS、JavaScript、图片等文件。JavaScript解释器(JavaScript Interpreter)

      如果页面中有JavaScript代码,浏览器会使用JavaScript解释器来解析和执行这些代码,实现交互性和动态效果。UI后端(UI Backend)

      此组件绘制浏览器的用户界面元素,如文本框和按钮。它使用操作系统的用户界面方法来实现。数据存储(Data Persistence)

      浏览器需要存储各种数据,包括cookies、缓存和本地存储。这些数据允许网站“记住”用户,并在不同页面之间保留状态。

      现在,结合下图来详细了解浏览器的工作原理:

      浏览器工作原理

      用户输入网址:用户在客户端电脑的浏览器地址栏中输入网址(),例如上图输入了,按下回车。

      客户端向服务器发送请求

      DNS解析:浏览器向域名系统(DNS)发送请求(),将网址转换为IP地址。这是因为计算机使用IP地址来定位服务器。建立连接:浏览器与服务器之间建立网络连接。这通常是通过HTTP请求完成的,即浏览器向服务器发送请求。

      服务器处理请求,做出响应:服务器收到浏览器的请求后,会处理请求并做出响应(),返回相应的数据,通常是HTML、CSS、JavaScript和其他资源。

      当您打开百度主页并按下Ctrl+U时(或者右键单击,选择查看源码),您将看到网页的源代码,其中包含了构成百度主页的HTML、CSS和JavaScript等内容。

      在这里插入图片描述

      在这里插入图片描述

      以下是您可能会在源码中看到的内容的解释:

      HTML 结构

      HTML 代码定义了页面的整体结构和布局,使用标签如 , , , , 等来创建网页的各个元素,所以您可以看到页面的分区、导航栏、页眉、页脚等元素。

      样式和样式表

      在源码中,您可能会看到 标签或外部 CSS 文件的链接,这些CSS层叠样式表定义了页面的外观,如颜色、字体、间距等。

      JavaScript 代码

      如果百度主页使用了 JavaScript 来实现动态效果、交互性和功能,您会在源码中找到 标签或外部 JavaScript 文件的链接。

      文本内容和图片

      HTML 代码中包含了文本内容,如标题、段落、列表、按钮等。同时,您将会看到使用 标签插入的图片,这些图片可能是百度主页上的图标、背景图像等。

      元数据和链接

      在 标签中,您可能会看到 标签,提供了有关页面的元数据,如字符集、作者、描述等。另外,您会看到使用 标签创建的链接和超链接,这些链接可能指向其他页面或资源。

      注释和外部资源链接

      源码中可能含有注释,以 的形式存在,提供了关于代码目的或作者的附加信息。同时,您还可能会看到链接到外部资源的标签,如外部 CSS 文件、JavaScript 库等,这些链接可以帮助构建页面的样式和功能。

      呈现页面:浏览器的呈现引擎解释HTML和CSS,将页面转换成用户可见的内容。

      JavaScript执行:如果页面包含JavaScript代码,浏览器会执行这些代码,实现交互性和动态效果。渲染页面:呈现引擎将处理后的内容渲染到屏幕上,呈现给用户。数据存储:浏览器可能会存储一些数据,如cookies、缓存和本地存储,以便在用户访问同一站点时提供更快的响应和保留用户状态。页面加载完成:当所有资源都加载完毕,页面完成呈现后,用户可以浏览页面内容。 用户交互:用户可以继续与页面进行交互,如点击链接、填写表单等。

        需要注意的是,这只是浏览器工作原理的简要概述,实际上涉及更多细节和过程。浏览器的工作涵盖了多个层面,包括网络通信、页面解析、渲染和用户交互等。不同浏览器可能在某些细节上有所不同,但总体流程是类似的。

      1.2 HTTP 概述

      参考官方文档《 HTTP 概述》

      1.2.1 HTTP简介

        HTTP: 全称为“超文本传输协议”(HyperText Transfer Protocol),是一种用于在计算机网络上传输超文本(例如 HTML、图片、视频等)的应用层协议。它是Web通信的基础,用于在客户端和服务器之间传输数据,使用户能够浏览和访问互联网上的各种资源。

        客户端-服务器模型: HTTP使用了客户端-服务器模型,其中客户端通常是指用户使用的Web浏览器,而服务器是存储和提供资源的计算机。当用户在浏览器中输入一个URL或点击链接时,浏览器会向服务器发送HTTP请求,请求特定的资源。服务器收到请求后,会根据请求的内容返回相应的HTTP响应,其中包括状态码、响应头和实际的数据(如HTML文件、图片等)。

        请求-响应机制: HTTP的工作方式是通过建立请求-响应的交互来实现的。每个HTTP请求都包含一个请求方法(如GET、POST、PUT等)、请求URI(统一资源标识符)、请求头和可选的请求主体。服务器根据请求的信息和方法进行处理,然后返回一个HTTP响应,包含状态码、响应头和响应主体。

        无状态: HTTP协议本身是无状态的,这意味着每个请求都是独立的,服务器不会保留之前请求的状态。为了解决这个问题,引入了Cookie和Session等机制,使得服务器能够跟踪用户的状态。

        总之,HTTP是Web通信的基础,它定义了客户端和服务器之间如何进行数据交换,使得用户能够在浏览器中获取和浏览各种网页和资源。

      1.2.2 五层网络模型

        五层网络模型是指OSI(Open Systems Interconnection)参考模型,它是一个用于理解和描述计算机网络体系结构的框架,将网络通信过程分为不同的层次,每一层都有特定的功能和责任。

      在这里插入图片描述

      五层网络模型

      OSI模型层主要功能当前层主要设备设备主要作用应用层提供用户应用程序与网络接口,定义通信协议(如HTTP、FTP、SMTP等),以实现各种网络服务和应用的通信代理服务器、负载均衡器代理服务器用于代理客户端请求

      负载均衡器分发网络流量到多个服务器,以实现资源的均衡利用,提高性能和可靠性。传输层提供端到端的数据传输,保证数据可靠性TCP&UDP传输层协议,用于在网络上的不同设备之间传输数据网络层负责路由和寻址。将数据从源主机发送到目标主机,通过选择最佳路径来实现跨网络的数据传输。IP(Internet Protocol)是网络层的重要协议,用于定义主机的逻辑地址路由器、防火墙路由器根据目标IP地址来决定如何将数据包从源网络传递到目标网络

      防火墙保护网络免受攻击数据链路层负责将物理层传输的比特流划分为帧,管理物理地址(MAC地址),进行帧的错误检测和纠正,以确保可靠的点对点数据传输交换机、网关交换机用于在局域网(LAN)内部进行数据帧的转发和交换,它能够根据数据帧中的目标MAC地址将数据包从一个端口转发到另一个端口,以便实现网络内部设备的通信。网关连接不同网络物理层最底层,负责物理信号传输wps的免费版的下载入口怎么找,即将数据转换为电压、电流等物理信号通过物理媒介(如电缆、光纤)进行传输调制解调器、网卡调制:将数字信号转换成模拟信号以便在电话线等模拟传输媒介上传输数据

      解调:将模拟信号转换成数字信号

      网卡连接计算机和网络媒介

      1.2.3 HTTP组件系统

        HTTP的组件系统是指构成HTTP协议的各个组成部分,这些部分共同协同工作,使得在网络上的数据传输变得高效、可靠和安全。HTTP的组件系统包括以下几个主要组件:

      客户端(Client): 客户端通常是指用户使用的Web浏览器,它发起HTTP请求并接收服务器的HTTP响应,获取所需的资源(网页、文本、图片、视频等)。

      服务器(Server): 服务器是存储和提供资源的计算机,它接收来自客户端的HTTP请求,并根据请求的内容作出相应的响应。服务器会处理请求,提取请求的资源,然后将响应发送回客户端。

      代理(Proxy): 代理是一种位于客户端和服务器之间的中间服务器,用于转发请求和响应。它可以拦截、修改、缓存或过滤传输的数据。使用代理服务器还可以提高网络性能、安全性和隐私性。

      缓存(可以是公开的也可以是私有的,如浏览器的缓存)过滤(如反病毒扫描、家长控制…)负载均衡(让多个服务器服务不同的请求)认证(控制对不同资源的访问)日志(使得代理可以存储历史信息)

      缓存(Cache): 缓存是一种临时存储机制,用于存储已经获取过的资源的副本,以便在后续的请求中可以更快地获取相同的资源。缓存可以减轻服务器负担,加快资源访问速度。

      网关(Gateway): 网关是连接不同协议或不同类型网络的设备,它可以将一个协议的请求转换为另一个协议的请求,从而使得不同类型的网络能够互相通信。

      隧道(Tunnel): 隧道是通过一个协议在两个通信应用之间建立私密的连接,以保护数据传输的安全性和隐私性。HTTPS使用TLS/SSL隧道来加密HTTP数据。

        所以,请求可以由由一个实体,即用户代理(user agent),或是一个可以代表它的代理方(proxy)发出。用户代理可以是一个网页浏览器,或者爬虫程序。

      在这里插入图片描述

        用户代理()通常是指客户端(例如Web浏览器)在进行HTTP请求时的标识。它包含了一些关于客户端的信息,例如用户使用的浏览器类型、版本、操作系统等。用户代理的作用是让服务器知道请求的源头是什么类型的设备和软件,从而服务器可以根据不同的用户代理提供不同的内容或适当的响应。例如,服务器可以根据不同的用户代理提供适合移动设备或桌面设备的网页版本。

      1.2.4 HTTP报文

      HTTP报文在客户端向服务器发起HTTP请求或服务器向客户端发送HTTP响应时发出。

      客户端发出HTTP请求报文: 当用户在浏览器中输入一个URL、点击链接、提交表单或执行其他操作时,浏览器会构建一个HTTP请求报文,包括请求行、请求首部和请求主体。然后,浏览器将该HTTP请求报文发送给服务器,以请求特定的资源或执行特定的操作。

      服务器发出HTTP响应报文: 服务器收到客户端发送的HTTP请求后,会根据请求的内容进行处理,并生成一个HTTP响应报文,包括状态行、响应首部和响应主体。服务器将该HTTP响应报文发送回客户端,以返回所请求的资源或操作的结果。

      下面是一个请求报文的示例:

      请求报文由以下元素组成:

      请求行(Request Line):包括请求方法(如GET、POST)、请求的URI(Uniform Resource Identifier)和HTTP版本。请求首部(Request Headers):包括一系列的首部字段,用于传递附加的请求信息,如User-Agent、Host、Accept等。空行(Blank Line):一个空行用于分隔请求首部和请求主体。请求主体(Request Body):可选部分,包含发送给服务器的数据,通常用于POST请求等情况。

      下面是一个响应报文示例:

      响应报文由以下元素组成:

      . 状态行(Status Line):包括HTTP版本、状态码和状态短语,描述服务器对请求的处理结果。响应首部(Response Headers):包括一系列的首部字段,用于传递附加的响应信息,如Server、Content-Type、Content-Length等。空行(Blank Line):一个空行用于分隔响应首部和响应主体。响应主体(Response Body):可选部分,包含服务器返回的数据,如HTML页面、图片、文本等。

      1.3 爬虫工作原理

        爬虫通过模拟浏览器行为,从服务器获取数据并进行解析和处理,使我们能够有效地从互联网上获取所需的信息。爬虫一般分为两类:

      :通常指搜索引擎的爬虫:针对特定网站的爬虫

      此时没有浏览器发送请求和解析渲染数据了,而是用爬虫程序来代替,也就是下图的黄色部分

      爬虫工作原理

      发送请求:爬虫程序会模拟浏览器,向目标服务器发送请求(GET请求或POST请求)。爬取的目标可以是一个特定的网页、整个网站,或者特定的数据源。

      服务器响应:服务器收到请求后,会根据请求的类型和参数,返回相应的数据。通常,服务器会以HTML、JSON、XML等格式返回数据。

      数据解析:爬虫程序会解析服务器返回的数据,根据预定的规则提取出所需的信息,提取文本、链接、图像等内容。

      数据处理和存储:爬虫从页面中提取的数据会被处理和清洗,以确保数据的准确性和一致性。然后,爬虫会将这些数据存储到合适的位置,如数据库、文件或其他存储系统。

      除了以上基础部分,还有一些进阶的操作:

      处理反爬:服务器有可能会有反爬虫的策略,如限制请求频率、使用验证码等,爬虫程序需要具备处理这些问题的能力。深度遍历:如果需要爬取多个页面或链接,爬虫会通过解析页面中的链接,形成一个链接队列,逐一访问这些链接并获取数据。这可以是广度优先搜索或深度优先搜索,取决于您的需求。数据处理和分析:一旦爬虫获取了足够的数据,您可以进行数据分析、可视化、挖掘等操作,从中提取有价值的信息。循环迭代:爬虫通常是一个持续运行的过程,因为网站内容会不断更新。爬虫需要周期性地重复上述步骤,以获取新数据并更新现有数据。

        通过对比浏览器和爬虫的工作原理,可以看到,除了模拟浏览器的正常操作之外,爬虫比浏览器还多了数据的加工处理的部分。

      1.4 HTML基础

      HTML官方文档、CSS官方文档、JavaScript官方文档

      1.4.1 HTML简介

        HTML,全称为“超文本标记语言”&wps office免费版的下载网址在哪里(wps官网最新首页2019)#xff08;HyperText Markup Language),是一种用于创建网页内容的标记语言,它使用各种标签和元素来描述网页的结构和显示方式。

        “超文本”(hypertext)是指连接单个网站内或多个网站间的网页的链接。“标记”(markup)是指HTML 使用标记来注明文本、图片和其他内容,以便于在 Web 浏览器中显示。HTML 标记包含一些特殊“元素”如 、、、等等。HTML 元素通过“标签”(tag)将文本从文档中引出,标签由在“<”和“>”中包裹的元素名组成,习惯上用小写字母表示。

        HTML可以理解为网页的“骨架”。它为浏览器提供了关于网页内容如何排列、呈现和交互的信息。通过在HTML文档中插入不同类型的标记,我们可以创建文本、图像、链接、表格和其他元素。

      1.4.2 HTML文档结构

      一个完整的HTML文档由标签和两对标签组成。

      声明:这是文档类型声明,用于告诉浏览器使用哪个HTML版本来渲染页面。例如:

      元素:这是HTML文档的根元素,包含整个HTML内容。它有两个主要部分: 和 。

      部分:这个部分包含关于文档的元信息,如页面标题、字符集设置等。它不会在浏览器中显示出来。

      例如下图是12306主页源码,其中head部分第一行标注了编码格式,title部分是网页标题,它显示在网页最上方的标签栏中,而不是网页的内容部分。

      在这里插入图片描述

      部分:这是页面的主要内容区域,包含要在浏览器中显示的所有内容,如文本、图像、链接等。

        HTML文档结构的正确设置对于网页的呈现和排版非常重要。确保标签正确嵌套和关闭,以避免出现问题

      1.4.3 CSS层叠样式表

      1.4.3.1 CSS的作用

        HTML只能定义网页的结构,但是不能定义网页的显示方式,如果要想让网页变得绚丽多彩就需要使用CSS(Cascading Style Sheet)层叠样式表,它通过定义元素的样式,如颜色、字体、大小和间距,使网页变得漂亮而富有吸引力。(分离 HTML 和 CSS 使得修改外观变得更加方便)

        样式是一组规则,用于定义元素的外观。我们可以在 HTML 中直接编写样式,但更好的方法是将样式放入 外部样式表 中这样做的好处是:

      可维护性: 所有页面共享相同的样式,更容易进行维护和修改。一致性: 所有页面的外观都保持一致,增强了用户体验。分离关注点: HTML 负责表示内容,CSS 负责外观,使 HTML 代码更加简洁,代码更具可读性。

        CSS规则由两个主要的部分构成:选择器和一条或多条声明:

      在这里插入图片描述

        选择器和声明是定义样式的关键。选择器是用于选择要应用样式的 HTML 元素的名称。每个选择器都与一个或多个属性相关联,这些属性定义了元素的外观。

      1.4.3.2 CSS选择器

      CSS的选择器有三种类型:

      元素选择器: 使用元素的名称来选择元素。例如,选择所有的 元素。上图h1是标题标签,所以是标签选择器。类选择器: 使用类名来选择元素。类选择器以点号开头,例如 .highlight。ID 选择器: 使用 ID 来选择元素。ID 选择器以开头,例如 #header。

      在这个示例中,我们使用了三种不同的选择器来选择不同的元素,并对它们应用不同的样式:

      元素选择器( 元素): 我们使用元素选择器选择所有的 <p> 元素,并将它们的文本颜色设置为蓝色。类选择器( 类): 我们使用类选择器选择具有 “highlight” 类的元素,并将它们的背景颜色设置为黄色。ID 选择器( ID): 我们使用 ID 选择器选择具有 “header” ID 的元素,并将它们的字体大小设置为24像素。

      通过使用这些不同类型的选择器,我们可以精确地选择要应用样式的元素。这使得我们可以更好地控制页面的外观和布局。

      1.4.3.3 CSS文本和字体样式

      文本样式包括字体、大小、颜色、对齐方式等。通过为文本应用样式,我们可以使网页内容更易读、更吸引人。

      元素的样式包括字体、大小、颜色和对齐方式,以及背景颜色。 元素的样式包括字体大小、颜色和下边距。 元素的样式包括字体大小、行高、颜色和下边距。 元素的样式设置了链接的颜色和去掉下划线。 类的样式设置了按钮的背景颜色、文字颜色、边框和圆角。

      1.4.4 HTML元素和标签

        HTML文档使用不同的元素和标签来描述网页的结构和内容。元素通常由一个开始标签、内容和结束标签组成,如,以下是常用的HTML标签:

      在这里插入图片描述

      段落和标题:通过使用标题和段落标签,你可以轻松地将文本内容组织成易于理解的格式(html代码):

      超链接:通过使用超链接,你可以在网页之间创建丰富的连接,使用户能够轻松地导航到其他页面和资源。

      使用标签创建超链接,你可以在属性中指定链接的目标。例如,要创建一个指向Google的超链接,你可以这样写:

      内部链接

      如果你想创建到同一网站的内部链接,你可以使用相对路径。例如,如果你的网页中有一个叫做的页面,你可以这样创建内部链接:

      链接到电子邮件

      你还可以使用超链接创建电子邮件链接,使用户能够点击链接发送电子邮件。例如:

      无序列表和有序列表

      无序列表用于创建项目没有特定顺序的列表。每个项目通常用圆点或其他符号来标记,例如:

      有序列表用于创建项目按照特定顺序排列的列表。每个项目通常使用数字或字母来标记。例如:

      自定义列表项:列表项标签用于定义每个列表项目。它可以嵌套在无序列表或有序列表中。
    wps office免费版的下载网站怎么找(如何登录wps官网最新)
      图像

      要在网页中插入图像,你可以使用标签,并在属性中指定图像的URL。例如:

      属性:图像的URL地址。属性:图像的替代文本,用于在图像无法加载时显示。

      你可以使用和属性来调整图像的尺寸。注意,尽量不要拉伸图像,以免影响图像质量。例如:

      如果想要并排显示图像,可以输入:

      显示如下:

      Image 1Image 2Image 2

      分区标签

      分区标签是HTML中的一个重要元素,用于创建一个容器来组织和样式化网页内容。它本身并没有特定的样式或效果,其主要作用是将相关内容分组并添加样式,比如用CSS来为添加样式。例如:

      你还可以为添加类名或ID,然后使用CSS来为其添加样式。例如,给添加类名:

      然后,在CSS中为类名添加样式(css代码):

      行内元素标签

      行内元素标签是HTML中的一个重要元素,用于对文本中的特定内容应用样式,从而增强网页的可读性和吸引力。例如:

      你还可以为标签添加类名或ID,并使用CSS样式化内部内容。

      给添加类名:

      在CSS中为类名添加样式:

      表格

      表格是网页中用于展示数据的重要元素。HTML提供了标签,用于创建表格。

      :定义表格。:定义表格的行。:定义表头单元格,通常用于表头。:定义普通单元格,用于表格数据。和:合并单元格。

      表单

      表单是网页中用于收集用户输入数据的重要元素。HTML提供了多种表单元素,例如文本框、单选按钮、复选框等。要创建一个表单,你需要使用标签,并在其中添加各种表单元素。

      在这个例子中,我们使用了标签来创建文本框、密码框和单选按钮。还使用了标签来为每个输入项添加标签。

      表单元素类型

      :文本框,用于输入文本。:密码框,用于输入密码。:单选按钮,用于从多个选项中选择一个。:复选框,用于选择一个或多个选项。:提交按钮,用于提交表单数据。

        例如我们打开12306网站,点击注册,就可以看到下面的表单。其中用户名是文本框,登录密码是密码框,证件类型是下拉选框,“我已阅读同意”前面的方框是复选框,下一步是提交按钮。

      在这里插入图片描述

      1.5 JavaScript

      1.5.1 简介

        JavaScript简称JS,是一种由客户端浏览器运行的动态脚本语言,旨在为网页添加交互性和动态性。JavaScript可以实现以下功能:

      添加交互性:通过 JavaScript,可以让网页元素在用户交互时产生响应,如按钮点击、鼠标悬停等。动态内容:JavaScript 可以动态地更新网页内容,而不需要刷新整个页面。表单验证:通过验证用户输入,JavaScript 可以确保表单数据的准确性和完整性。数据交互:JavaScript 可以通过 AJAX 或 Fetch API 与服务器进行数据交换,实现无需刷新的数据更新。动画效果:JavaScript 可以创建各种动画效果,使页面更具吸引力和生动性。

      1.5.2 基本语法

      JavaScript 有一些基本的语法规则:

      语句:JavaScript 代码由一条条语句组成,每条语句以分号结尾。变量:使用关键字 、 或 声明变量,例如:数据类型:JavaScript 有多种数据类型,如数字、字符串、布尔值、数组、对象等。函数:使用关键字 定义函数,函数可以接受参数并执行特定的操作。条件语句:使用 、 和 来执行条件判断。循环语句:使用 、 或 来进行循环操作。

      现在,让我们进一步探讨 JavaScript 的基本语法和概念。

      变量声明和赋值: 使用 、 或 来声明变量。例如:

      在命名变量时,需要遵循一些规则:

      变量名必须以字母、下划线(_)或美元符号($)开头。变量名可以包含字母、数字、下划线或美元符号。变量名区分大小写,例如 和 是不同的变量。

      数据类型: JavaScript 有不同的数据类型,包括字符串、数字、布尔值、数组、对象等。对象是一种复合的数据类型,它可以存储多个键值对。每个键都是一个字符串,对应一个值。对象可以存储不同类型的值。

        在上面的示例中,我声明了各种数据类型的变量,并使用 运算符来确定每个变量的数据类型。你可以在控制台中查看输出,了解每种数据类型的值和类型。

      函数定义: 使用 关键字定义函数,例如:

      条件语句: 使用 、 和 进行条件判断。例如:

      循环语句: 使用 、 或 来执行循环操作。例如:

      1.5.3 基本操作

      操作符:JavaScript 支持多种操作符,用于执行不同的操作,例如加法、减法、乘法等。例如:

      类型转换:JavaScript 会自动进行类型转换,但有时你可能需要显式地转换数据类型。例如:

      数组和对象操作:你可以使用索引访问数组中的元素,例如 访问数组的第一个元素。对象的属性可以通过键来访问,例如 访问对象的 属性。字符串操作:JavaScript 提供了许多字符串操作方法,如拼接、截取、查找等。例如:

      JavaScript 动画和效果

      通过 JavaScript,你可以为网页添加动画和效果,使用户体验更加生动和吸引人。例如,你可以使用 或 来创建动态效果。

      1.5.4 事件处理

         通过 JavaScript,你可以为网页元素添加事件监听器,实现交互性。假设你想编写一个简单的 JavaScript 程序,让用户输入名字并显示问候信息:

        DOM(Document Object Model)是一种将 HTML 文档中的每个元素都视为对象的方式。通过 DOM,你可以使用 JavaScript 访问、修改和操作网页上的元素,例如文本、图像、按钮等。通过 DOM,你可以监听用户在页面上的操作,例如点击按钮、鼠标移动等。你可以使用 方法来添加事件监听器。例如:

      1.5.5 前端框架和库

        前端框架和库可以帮助你更高效地构建用户界面和交互。例如,React 允许你构建可复用的 UI 组件,Vue 提供了响应式数据绑定,Angular 则提供了完整的开发框架。

        在实际项目中,代码往往非常庞大,为了更好地组织和管理代码,我们使用模块化的方法。这意味着将代码分割成不同的模块,每个模块负责特定的功能。包管理器如 (Node.js 包管理器)和 使我们能够方便地安装、管理和分享代码库。你可以通过这些工具来使用其他开发者编写的代码库。

      urllib官方文档、requests官方文档

      2.1 urllib(Python内置模块)介绍

         是 Python 的一个标准库,用于处理 URL和执行网络请求。它提供了一些模块,可以帮助你发送 HTTP 请求、解析 URL 和处理网络数据。 库包括以下主要模块:

      :用于发送各种类型的 HTTP 请求,并获取服务器响应,包括状态码、响应头和响应体。:用于对 URL 中的数据进行编码和解码。

      解析 URL: 模块可以解析 URL,将其分解为协议、主机、路径、查询参数等各个部分。编码: 可以构建URLs,以便在请求中传递参数。 :包含异常类,用于处理与网络请求相关的异常。:用于解析 robots.txt 文件,以确定网站是否允许爬虫访问。

        urllib发送请求可以使用方法,参数文档如下:

      :要打开的 URL 地址,可以是一个字符串(URL)或一个 对象(定制的请求,例如设置请求头、数据等)。

      :可选参数,用于在请求中发送的数据。未提供时使用 GET 发送请求,否则将使用 POST 请求发送,并且会将这些数据附加到请求体中。

      :可选参数,设置超时时间,单位为秒。如果服务器在指定时间内没有响应,将会引发一个超时异常。

      :CA 证书文件相关的可选参数,暂不需要了解。

      :可选参数,用于传递一个 对象,用于配置 SSL/TLS 设置,例如指定加密协议、验证模式等。

      这个方法会返回一个类似文件对象的响应,可以使用处理于文件对象的方法来读取响应数据,例如 、、 等。

      2.2 request介绍

         是一个流行的 Python 第三方库,用于发送 HTTP 请求并处理响应。它提供了一种简单、优雅的方式来进行网络通信,支持多种请求方法(GET、POST、PUT、DELETE 等),自动处理 URL 编码、Cookie、会话管理、SSL 验证等。

        requests 通常被认为更加简洁易用,并提供了更多的功能和配置选项。以下是 库的主要功能、常用模块和方法的详细介绍:

      主要功能:

      发送 HTTP 请求:支持多种请求方法,如 GET、POST、PUT、DELETE 等。处理响应:自动解析服务器响应,提供易于使用的 API 访问响应内容和头信息。处理 URL 编码:自动将参数编码并添加到 URL 中。处理 Cookies:支持自动管理 Cookies,可以在请求之间保持会话状态。会话管理:支持会话对象,可以跨请求保持会话状态。SSL 验证:支持 SSL/TLS,可以验证服务器证书。异常处理:提供详细的异常信息,方便进行错误处理。响应内容解码:自动处理响应内容的编码。文件上传:支持上传文件。支持 JSON 解析:自动将 JSON 响应解析为 Python 对象。

      常用模块:

      :主要模块,包含各种 HTTP 请求方法的函数。:用于创建和管理会话,保持会话状态。:包含各种可能的异常类,用于捕获错误情况。

      常用方法和参数用法:

      :

      发送一个 GET 请求到指定的 URL。:请求的目标 URL。:一个字典或字符串,作为 URL 参数。 会自动将参数进行 URL 编码,并将其添加到 URL 中。:其他关键字参数,用于设置请求的各种属性,例如请求头、超时时间等。

      :

      发送一个 POST 请求到指定的 URL。:请求的目标 URL。:一个字典、元组列表或字符串,作为 POST 请求的数据体。如果设置了 , 会被设置为 ,数据将被编码成表单数据。:一个字典,作为 POST 请求的 JSON 数据体。如果设置了 , 会被设置为 。:其他关键字参数,用于设置请求的各种属性,例如请求头、超时时间等。

      常用的 参数包括:

      :自定义请求头。:自定义 Cookies。:HTTP 基本认证。:请求超时时间。

      : 创建一个会话对象,用于跨多个请求保持会话状态。: 获取响应内容,自动处理编码。: 获取响应状态码。: 将 JSON 响应内容解析为 Python 对象。: 获取响应头信息。: 获取响应中的 Cookies。: 如果请求失败,抛出异常。: 基本的请求异常类,可以捕获大多数请求错误。

      2.3 发送请求

      2.3.1 发送GET请求

        下面以起点中文网为例。按F12打开开发者模式,可见其编码格式为utf-8,所以对于读取到的服务器响应数据,要将其转为utf-8编码格式,才能正确显示中文。

      在这里插入图片描述

      使用urllib发送GET请求

      使用requests发送GET请求

      2.3.2 对象(requests)

        发送GET请求后返回的是 对象,其中包含了许多信息,下面以requests库为例,列举常用的 对象属性和方法:

      : 获取响应的状态码,例如 200 表示成功,404 表示页面不存在等。: 获取响应头信息,返回一个字典,包含响应的头部字段。可获取特定的响应头字段的值,例如 。: 获取响应的内容,以字符串形式返回。: 获取响应的二进制内容,以字节形式返回,如图片、视频等。: 解析 JSON 格式的响应,返回一个 Python 对象: 获取实际的请求 URL,用于处理重定向。: 获取响应中的 Cookies,返回一个 对象。: 获取请求的响应时间,以 对象表示。

      下面我们来解析 对象:

      下面是一些常见的网站服务器响应码及其含义:

      响应码含义200OK – 请求成功201Created – 创建成功204No Content – 无响应内容400Bad Request – 请求错误401Unauthorized – 未授权403Forbidden – 禁止访问404Not Found – 资源不存在405Method Not Allowed – 不允许的请求方法500Internal Server Error – 服务器内部错误502Bad Gateway – 错误的网关503Service Unavailable – 服务不可用

      2.3.3 含请求参数的GET请求(解析 URL)

        我们打开香网小说,在主页搜索小说“主神崛起”,可以看到地址栏显示为,但是复制下来却是。

        我们按下F12开启开发者模式,刷新网页。在选项卡中选择第一个网页,在右侧中,可以看到,Request URL也显示为。这是因为,为了保证兼容性和避免问题,通常URL 中会使用 URL 编码来表示中文字符。

      在这里插入图片描述

      Request URL经过了编码,Request Method为GET,状态码为200

      URL 编码会将特殊字符转换成 % 符号后跟两个十六进制数,以便在 URL 中传输和解析。

      2.3.3.1 urllib编码解码

        我们可以使用urllib.parse的方法对URL中的中文进行编码,也可以使用方法对编码后的URL进行解码。

      2.3.3.2 request自动编码解码

      和urllib不同,request可以自动对URL和响应内容进行编码,所以更加便捷。

      URL 编码:

      : 在使用 时,你可以将参数作为字典传递给请求方法,并且 库会自动将参数进行 URL 编码,构建出完整的 URL。你无需手动进行 URL 编码。: 在使用 时,你需要手动使用 对参数进行 URL 编码,并将编码后的参数字符串拼接到 URL 中,以构建完整的 URL。 响应编码处理:

      : 库会根据响应头中的字符编码(如 )自动解码响应内容,你可以直接使用 获取已解码的文本内容。: 库不会自动解码响应内容,你需要使用 方法手动对响应内容进行解码,通常是使用 编码。

      如果地址栏中没有键值对,而只是隔开,可以写成:

      对于获取的响应,直接使用response.text获取结果:

        对于 ,通常情况下, 库会自动根据响应头的 字段来选择正确的字符编码。如果出现乱码问题,通常是因为服务器返回的内容和解码方式不匹配,在这种情况下,可以尝试使用 response.content 获取原始的二进制内容,然后手动指定正确的编码进行解码。

        例如我们爬取香网数据,直接打印response.text,返回结果没有正常显示。此时可以使用,指定编码格式:

         和 的差异: 和 都是用于获取响应内容的属性,但它们在处理内容的方式上有一些不同。

      :

      返回一个字符串对象,自动使用正确的字符编码(例如 UTF-8)来解码响应内容。如果响应内容中包含文本,使用 可以直接得到以字符串形式表示的内容。如果响应内容是二进制数据, 会尝试自动使用正确的编码进行解码,但有时可能会出现解码错误,需要手动指定编码。适合处理包含文本信息的响应,如 HTML、XML、JSON 等。

      :

      返回一个字节对象( 类型),即原始的二进制内容。

      不进行任何编码解码,以原始的字节形式返回响应内容。适合处理包含二进制数据的响应,如图片、音频、视频等。

      2.3.4 发送POST请求

      2.3.4.1 GET请求和POST请求的区别

        GET 请求和 POST 请求是 HTTP 协议中的两种常见请求方法,都用于在客户端(通常是浏览器)和服务器之间传递数据。但是GET 请求通常用于获取服务器上的数据,而不会对服务器的状态产生影响;而 POST 请求通常用于提交数据到服务器,可能会对服务器的状态进行修改。另外,二者还有一些区别:

      数据传递位置:

      GET 请求: 请求数据会附加在 URL 的查询字符串中(地址栏中),即在 URL 后面使用 将参数和值连接起来,参数之间使用 分隔。例如:。POST 请求: 请求数据会包含在请求体中(在中显示),而不是附加在 URL 上。

      安全性

      GET 请求: 数据以键值对的形式直接附加在 URL 上,可被轻松看到和修改。因此,不适合传递敏感信息。POST 请求: 数据在请求体中,不会被直接暴露在 URL 中,相对来说更安全,适合传递敏感信息。

        综上所述,GET 请求参数在URL中,所以适用于非敏感数据的传递,如检索、搜索等。而 POST请求参数在请求体中, 更适合传递敏感信息和提交数据给服务器,比如提交表单(注册/登录)、上传下载文件等。

        下面还是以香网小说举例,打开http://www.xiang5.com/,在左上角随便输入账户名amdin和密码admin进行登录。在network中打开第一个login网页,右侧可以看到请求方式是POST,请求网址是http://pass.xiang5.com/login.php。

      在这里插入图片描述

      POST请求进行登录操作

      点击payload可以查看输入的登录账号和密码,而没有显示在URL中。

      在这里插入图片描述

      POST请求参数显示在payload中

      2.3.4.2 使用requests发送POST请求

        要发送 POST 请求,你需要创建一个请求对象并在其中设置请求的方法为 “POST”,同时传递需要发送的数据作为参数。下面是一个简单的示例:

      2.3.4.3 使用GET请求下载百度logo和百度首页

        打开https://www.baidu.com/,按下F12打开开发者模式,刷新页面,选择result@2.png,这个就是百度logo图片。

      在这里插入图片描述
    wps的的官网下载地方
        点击Header可以看到其URL为。下面我们用POST请求来进行下载:

        虽然理论上也可以使用 POST 请求下载资源,但这不符合 HTTP 请求的语义和习惯,也可能会引起混淆。因此,在下载静态资源时,使用 GET 请求更加常见和合适。POST 请求通常用于向服务器提交数据,而不是用于获取资源。

      同理,我们也可以使用requests下载百度首页:

      2.4 使用请求头

        许多网站会采取反爬虫措施,限制或拒绝自动化爬取工具的访问。比如在访问豆瓣网站的首页时,使用正常的爬虫代码,响应结果状态码为418。

        一种常见的反爬措施是检查请求头中的用户代理(User-Agent)信息,来判断是否为真实浏览器发起的请求。如果请求头中的用户代理信息不符合浏览器的特征,服务器可能会认为这是自动化爬取程序,并拒绝响应或返回错误码(如状态码 418 – I’m a teapot)

        另外, 一些网站可能会根据用户代理信息提供不同的响应内容,比如移动版和桌面版的页面。

        所以,通过设置合适的请求头,你可以模拟浏览器行为,避免被识别为爬虫,并获得正确的响应。

        我们打开豆瓣官网——https://www.douban.com/,进入开发者模式,往下拉可以看到User-Agent信息,我们将其添加到GET请求头中,就可以正确爬取豆瓣首页内容例了。

      在这里插入图片描述

      3.1 XPath解析

      : 用于处理 XML 和 HTML 文档的库,lxml官方文档。

      3.1.1 XML文档的树状结构

        XPath是XML Path Language的简称,即XML路径语言。它是一种小型的查询语言,可以在XML文档中查找信息,同时它也支持在HTML语言中查找信息。

        XML 文档通常采用树状结构来组织数据,其中有且只有一个根元素(library),每个元素都可以包含子元素和属性。以下是一个简单的 XML 文档的树状结构示例:

      在这个示例中,XML 文档描述了一个图书馆的书籍信息。树状结构如下:

      在这个树状结构中:

      library 是根元素,它包含两个 book 元素作为子元素;每个 book 元素都包含 title、author 和 genre 子元素title、author 和 genre 子元素包含文本内容(一对标签中间的是文本),分别表示书名、作者和书籍类型。你可以在元素标签内部使用 name=“value” 的形式来添加属性。上面例子中,每个 book 元素都有一个id属性。

      3.1.2 XPath路径表达式

         是一种用于浏览器的扩展程序,通常用于帮助开发人员在网页上使用 XPath 表达式来选择和定位 HTML 或 XML 文档中的特定元素。它可以方便地测试和验证 XPath 表达式,并查看匹配的结果,从而帮助开发人员调试和开发网页抓取、数据提取、自动化测试等应用。

        在此之前,我们先学习一下如何使用XPath表达式选取节点(以上面library的xml文档举例:)

      语法描述示例结果选取所有指定节点的子节点, 从根节点选取, ```选取文档中的所有匹配节点, 选取当前节点选取当前节点的父节点无匹配,因为根节点没有父节点选取当前节点的指定属性, 选取具有指定属性值的节点多个属性筛选选取指定位置的节点选取最后一个节点选取当前节点的文本内容,

      和 : 这两个方法都用于选取所有名为 “book” 的直接子节点或后代节点。因为XML中有两个 节点,所以两个方法都返回两个 节点。

      XPath中的斜杠 / 用于指示路径的层次结构,以从根节点到特定节点的方式进行导航,如果直接写 ,结果会是空列表

      : 这个方法用于选取当前节点,即 节点。所以结果是整个 节点及其子节点。

      : 这个方法用于选取当前节点的父节点,但对于根节点 来说,它没有父节点,因此结果为空列表。

      : 这个方法用于选取具有属性 值为 “1” 的 节点。因为只有一个符合条件的节点,所以结果是一个包含此节点的列表。

      : 这个方法用于选取具有 子节点内容为 “Fantasy” ,同时id属性为1的 节点。因为只有一个符合条件的节点,所以结果是一个包含此节点的列表。

      : 这个方法用于选取第一个 节点,根据位置索引来选取。结果是包含第一个 节点的列表。

      : 这个方法用于选取最后一个 节点,根据位置索引来选取。结果是包含最后一个 节点的列表。

      : 这个方法用于选取所有 子节点的文本内容。结果是两个 节点的文本内容,即书籍的标题。

      3.1.3 Xpath解析起点小说月票榜

        先pip安装,然后点击Xpath Helper下载安装Xpath助手插件了。安装完毕后,先固定Xpath Helper图标,使用时点击一下就行。

      在这里插入图片描述

      你也可以先设置快捷键:ctrl+shift+x,使用时按对应快捷键就行。

      在这里插入图片描述

      下面演示一下如何提取起点小说月票排行榜第一页的小说名称和作者。

      打开起点小说月票排行榜https://www.qidian.com/rank/yuepiao/,按F12进入开发者模式,刷新网页点击element标签旁边的选取按钮(选取网页中的元素),点击第一本书作者,就可以跳转到网页源码中的对应位置。

      在这里插入图片描述输入就可以提取所有的书名,输入提取所有的作者。

      在这里插入图片描述使用爬虫代码获取数据:

      3.2 BeautifulSoup解析

      BeautifulSoup官方文档

      3.2.1 BeautifulSoup解析器

        Beautiful Soup 是一个用于解析 HTML 和 XML 文档的 Python 库。它提供了一种简单而强大的方式来从网页中提取信息,使得我们可以轻松地获取所需的数据。它可以:

      解析 HTML 和 XML 文档,构建文档树。遍历文档树,搜索和定位特定的标签,提取标签中的文本、属性和其他内容。处理网页中的嵌套结构和复杂布局。处理动态加载的内容,如使用 JavaScript 加载的数据。

      安装:

      BeautifulSoup有几种解析器:

      解析器名称介绍选择建议内置于标准库,解析速度适中,适合大多数简单的 HTML 解析任务。适用于简单的 HTML 解析任务,无需额外安装库。解析速度非常快,对大型文档效果显著,支持 HTML 和 XML 解析。具有较好的容错性。适用于大型文档或复杂嵌套结构的解析任务,需要安装 库。能够处理复杂的嵌套结构和不规范的 HTML,解析准确性高。解析速度较慢,不适合大型文档。适用于处理不规范的 HTML 或复杂结构,适用于较小的文档。需要安装 库。

      3.2.2 Beautiful Soup 提取标签和内容

      下面举例说明Beautiful Soup 提取标签和内容的方法,以及相应的示例和结果:

      方法作用示例结果搜索并返回第一个匹配的标签搜索并返回所有匹配的标签列表列表包含所有 标签提取标签中的文本内容获取标签的属性值

      3.2.3 Beautiful Soup解析起点小说月票榜

      3.2.3 CSS 选择器与 Beautiful Soup

        CSS 选择器是一种用于选择 HTML 元素的强大工具,它可以帮助您通过元素的标签、类、ID 和其他属性来定位和选择元素。在 Beautiful Soup 中,您可以利用 CSS 选择器来精确地找到您感兴趣的内容。

      标签选择器: 使用标签名称来选择特定类型的元素。例如,选择所有的 标签可以使用 。类选择器: 使用类名来选择具有特定类的元素。例如,选择所有具有 的元素可以使用 。ID 选择器: 使用 ID 来选择具有特定 ID 的元素。例如,选择具有 的元素可以使用 。后代选择器: 选择某个元素的后代元素。例如,选择所有在 中的 元素可以使用 。

      用于查找并返回文档中符合条件的第一个元素,select用于查找并返回所有符合条件的元素。

      3.3 正则表达式解析(略)

      3.4 PyQuery解析(略)