自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(247)
  • 收藏
  • 关注

原创 计算机是怎样跑起来的-第3章 体验一次手工汇编

计算机是怎样跑起来的-第3章 体验一次手工汇编本章的目标是通过编写程序使诸位亲身体验计算机的运行机制。为了达到这个目的,就需要使用一种叫作“汇编语言”的编程语言来编写程序,然后再把编好的程序通过手工作业转换成 CPU 可以直接执行的机器语言。这样的转换工作叫作“手工汇编”(Hand  Assemble)。也许会有人觉得听起来就好像挺麻烦的,事实上也的确如此,但是还是希望所有和计算机相关的技术人员都能亲身体验一下用汇编语言编程和手工汇编。这次体验应该能加深诸位对计算机的理解,使诸位犹如拨云见日,找到

2025-05-10 00:11:40 559 1

原创 计算机是怎样跑起来的-第2章 试着制造一台计算机吧

计算机是怎样跑起来的-第2章 试着制造一台计算机吧要想彻底掌握计算机的工作原理,最好的方法就是自己搜集零件,试着组装一台微型计算机。微型计算机(MicroCom)是 Micro Computer 的缩写,字面含义是微小的计算机,但一般也可用于指代 IC 元件外露的、用于控制的计算机。因为要制作一台真正的微型计算机既花时间又花金钱,所以本章就在纸上体验一下微型计算机的制作过程吧。需要让诸位准备的只有如图 2.1 所示的电路图和一根红铅笔。将电路图复印下来后,请诸位一边想象着元件之间传输的信号的作用,一边用红

2025-05-09 20:14:22 687

原创 计算机是怎样跑起来的-第1章 计算机的三大原则

现在的计算机看起来好像是种高度复杂的机器,可是其基本的构造却简单得令人惊讶。在认识计算机时,需要把握的最基础的要点只有三个,我们就将这三个要点称为“计算机的三大原则”吧。只要了解了计算机的三大原则,就会感到眼前豁然开朗了,计算机也比以往更加贴近自己了,就连新技术接连不断诞生的原因也明白了。本书以本章介绍的计算机的三大原则为基础,内容延伸至硬件和软件、编程、数据库、网络以及计算机系统。在阅读之后的章节时,也请诸位时常将计算机的三大原则放在心上。下面就赶紧开始介绍计算机的三大原则吧。

2025-05-09 00:13:50 994

原创 网络是怎样连接的-第6章 请求到达Web服务器,响应返回浏览器

网络是怎样连接的-第6章 请求到达Web服务器,响应返回浏览器6.1.1 客户端与服务器的区别当网络包到达 Web 服务器之后,服务器就会接收这个包并进行处理,但服务器的操作并不是一下子从这里开始的。在服务器启动之后,需要进行各种准备工作,才能接受客户端的访问。因此,处理客户端发来的请求之前,必须先完成相应的准备工作。要理解服务器的工作方式,搞清楚包括这些准备工作在内的服务器整体结构是很重要的,下面我们就来从整体上介绍一下服务器。首先,服务器和客户端有什么区别呢?根据用途,服务器可以分为很多种类,其

2025-05-08 23:34:34 756

原创 网络是怎样连接的-第5章 服务器端的局域网中有什么玄机

网络是怎样连接的-第5章 服务器端的局域网中有什么玄机5.1.1 在公司里部署 Web 服务器网络包从互联网到达服务器的过程,根据服务器部署地点的不同而不同。最简单的是图 5.1(a)中的这种情况,服务器直接部署在公司网络上,并且可以从互联网直接访问。这种情况下,网络包通过最近的 POP 中的路由器、接入网以及服务器端路由器之后,就直接到达了服务器。其中,路由器的包转发操作,以及接入网和局域网中包的传输过程都和我们之前讲过的内容没有区别 A。以前这样的服务器部署方式很常见,但现在已经不是主流方式了

2025-05-08 18:10:07 1109

原创 程序是怎样跑起来的-第6章 应用和硬件

在程序的运行过程中,几乎无时无刻都会发生中断,其原因就是为了实时处理外部输入的数据,虽然程序也可以在不会中断的基础上处理外部数据,但是那种情况下,主程序就会频繁的检查外围设备是否会有数据输入。首先是蜂鸣器发声的部分,通过 IN EAX,61H(助记符不区分大小写)指令,把端口 61H 的数据存储到 CPU 的 EAX 寄存器中。实施中断请求的是连接外围设备的 I/O 控制器,负责实施中断处理的是 CPU,外围设备的中断请求会使用不同于 I/O 端口的其他编号,该编号称为中断编号。该机制被称为 处理中断。

2025-05-08 14:17:24 824

原创 程序是怎样跑起来的-第5章 汇编语言和本地代码

call 指令运行后,call 指令的下一行(也就指的是 (6) 这一行)的内存地址(调用函数完毕后要返回的内存地址)会自动的 push 入栈。会被尽可能的分配在寄存器中。但是本地代码的可读性非常差,所以需要使用一种能够直接读懂的语言来替换本地代码,那就是在各本地代码中,附带上表示其功能的英文缩写,比如在加法运算的本地代码加上add(addition) 的缩写、在比较运算符的本地代码中加上cmp(compare)的缩写等,这些通过缩写来表示具体本地代码指令的标志称为 助记符,使用助记符的语言称为汇编语言。

2025-05-08 14:12:31 779

原创 程序是怎样跑起来的-第4章 操作系统

CPU 的类型不同,所对应机器的语言也不同,同样的道理,操作系统的类型不同,应用程序向操作系统传递指令的途径也不同。应用的可执行文件指的是,计算机的 CPU 可以直接解释并运行的本地代码,不过这些代码是无法直接控制硬件的,事实上,这些代码是通过操作系统来间接控制硬件的。传递给 fputs() 的参数,是往文件中写入的字符串"你好" 和 fp,传递给 fclose() 的参数,也仅仅是 fp,也就是说磁盘通过打开文件这个操作,把磁盘抽象化了,打开文件这个操作就可以说是操作硬件的指令。下图反映了这个过程。

2025-05-08 14:02:23 651

原创 程序是怎样跑起来的-第3章 磁盘

簇和扇区的大小是相等的。磁盘缓存指的是把从磁盘中读出的数据存储到内存的方式,这样一来,当接下来需要读取相同的内容时,就不会再通过实际的磁盘,而是通过磁盘缓存来读取。它的前身是 MS-DOC,最初的版本可以在 128kb 的内存上运行程序,但是现在想要 Windows 运行流畅的花至少要需要 512MB 的内存,但通常往往是不够的。磁盘中存储的程序必须加载到内存中才能运行,在磁盘中保存的程序是无法直接运行的,这是因为负责解析和运行程序内容的 CPU 是需要通过程序计数器来指定内存地址从而读出程序指令的。

2025-05-08 12:50:52 855

原创 程序是怎样跑起来的-第2章 二进制

上述例子中还是以 39 为例,我们先把十进制的39 转换为二进制的 0010 0111,然后向左移位 <<一个字节,也就变成了 0100 1110,那么再把此二进制数转换为十进制数就是上面的78, 十进制的78 竟然是 十进制39 的2倍关系。3 - 5 的运算,我们按着上面的思路来过一遍,计算出来的结果是 1111 1110,我们知道,这个数值肯定表示负数,但是负数无法直接用十进制表示,需要对其取反+ 1,算出来的结果是 2,因为 1111 1110的高位是 1,所以最终的结果是 -2。

2025-05-08 11:57:43 633

原创 程序是怎样跑起来的-第1章 对程序员来说CPU是什么

程序的开始过程和顺序流程是一样的,CPU 从0100处开始执行命令,在0100和0101都是顺序执行,PC 的值顺序+1,执行到0102地址的指令时,判断0106寄存器的数值大于0,跳转(jump)到0104地址的指令,将数值输出到显示器中,然后结束程序,0103 的指令被跳过了,这就和我们程序中的 if() 判断是一样的,在不满足条件的情况下,指令会直接跳过。计算机所有程序的运行都是在内存中运行的,内存又被称为主存,其作用是存放 CPU 中的运算数据,以及与硬盘等外部存储设备交换的数据。

2025-05-08 11:38:24 679

原创 网络是怎样连接的-第4章 通过接入网进入互联网内部

网络是怎样连接的-第4章 通过接入网进入互联网内部4.1.1 互联网的基本结构和家庭、公司网络是相同的互联网是一个遍布世界的巨大而复杂的系统,但其基本工作方式却出奇地简单。和家庭、公司网络一样,互联网也是通过路由器来转发包的,而且路由器的基本结构和工作方式也并没有什么不同(图 4.1)。因此,我们可以将互联网理解为家庭、公司网络的一个放大版。当然,互联网也有一些和家庭、公司网络不同的地方,其中之一就是与转发设备间的距离。在家庭、公司网络中,与转发设备之间的距离不过几十米到几百米,在这种情况下,只

2025-05-08 08:46:15 700

原创 网络是怎样连接的-第3章 从网线到网络设备

网络是怎样连接的-第3章 从网线到网络设备3.1.1 每个包都是独立传输的从计算机发送出来的网络包会通过集线器、路由器等设备被转发,最终到达目的地。我们在第 2 章的 2.5.1 节和 2.5.2 节讲过,转发设备会根据包头部中的控制信息,在转发设备内部一个写有转发规则的表中进行查询,以此来判断包的目的地,然后将包朝目的地的方向进行转发。邮递员在送信的时候只看信封,不看里面的内容,同样地,转发设备在进行转发时也不看数据的内容。因此,无论包里面装的是应用程序的数据或者是 TCP 协议的控制信息 A,都不

2025-05-08 00:27:13 778

原创 网络是怎样连接的-第2章 用电信号传输TCP/IP数据

网络是怎样连接的-第2章 用电信号传输TCP/IP数据2.1.1 协议栈的内部结构本章我们将探索操作系统中的网络控制软件(协议栈)和网络硬件(网卡)是如何将浏览器的消息发送给服务器的。和浏览器不同的是,协议栈的工作我们从表面上是看不见的,可能比较难以想象。因此,在实际探索之前,我们先来对协议栈做个解剖,看看里面到底有些什么。协议栈的内部如图 2.1 所示,分为几个部分,分别承担不同的功能。这张图中的上下关系是有一定规则的,上面的部分会向下面的部分委派工作,下面的部分接受委派的工作并实际执行,这一点大

2025-05-07 16:00:03 603

原创 网络是怎样连接的-第1章 浏览器生成消息

网络是怎样连接的-第1章 浏览器生成消息1.1.1 探索之旅从输入网址开始1.1.1 探索之旅从输入网址开始我们的探索之旅从在浏览器中输入网址开始 A,在介绍浏览器的工作方式之前,让我们先来介绍一下网址。网址,准确来说应该叫 URLB,如果我说它就是以 http:// 开头的那一串东西,恐怕大家一下子就明白了,但实际上除了“http:”,网址还可以以其他一些文字开头,例如“ftp:” “file:” “mailto:”C 等。之所以有各种各样的 URL,是因为尽管我们通常是使用浏览器来访问Web 服务器

2025-05-06 14:13:28 752

原创 网络是怎样连接的-概述

我读过很多计算机网络方面的书,但也正是因为网络太复杂了,这些书一般都只讲其中的一个协议(比如 HTTP),或者是一个局部的技术(比如网络设备的部署),很少有像这本书一样,从一个常见的场景切入,把整个网络的全貌如此清晰地展现出来。在骨干网中存在很多运营商和大量的路由器,这些路由器相互连接,组成一张巨大的网,而我们的网络包就在其中经过若干路由器的接力,最终被发送到目标 Web 服务器上。也就是说,无论是在互联网中,还是在家庭、公司的局域网中,包都是以相同的方式传输的,这也是互联网的一大特征。

2025-05-06 13:26:21 626

原创 Python爬虫-请求模块urllib3

发送网络请求后,将返回一个HTTPResponse对象,通过该对象中的info()方法即可获取HTTP响应头信息,该信息为字典(dict)类型的数据,所以需要通过for循环进行遍历才可清晰的看到每条响应头信息内容。如果服务器返回了一条JSON信息,而这条信息中只有某条数据为可用数据时,可以先将返回的JSON数据转换为字典(dict)数据,接着直接获取指定键所对应的值即可。请求头信息获取完成以后,将“User-Agent”设置为字典(dict)数据中的键,后面的数据设置为字典(dict)中 value。

2024-08-17 14:15:26 1019 1

原创 Python爬虫-请求模块Urllib

Python3中的Urllib 模块中包含多个功能的子模块,具体内容如下:urllib.request:用于实现基本HTTP请求的模块。urllib.error:异常处理模块,如果在发送网络请求时出现了错误,可以捕获异常进行异常的有效处理。urllib.parse:用于解析URL的模块。urllib.robotparser:用于解析robots.txt文件,判断网站是否可以爬取信息。

2024-08-17 13:38:49 811

原创 Python爬虫技术与应用:原生态网络爬虫开发

cookie可以翻译为“曲奇、小饼干”,cookie在网络系统中几乎无处不在,当浏览以前访问过的网站时,网页中可能会出现“你好XXX”,这会让人感觉很亲切,就如同吃了一个小甜品一样。这其实是经由访问主机中的一个文件来实现的,这个文件便是cookie。在因特网中,cookie实际上是指少量信息,是由Web服务器创建的,把信息存储在用户计算机上的文件。一般网络用户习惯用其复数形式cookies,指某些网站为甄别用户身份、进行会话跟踪而存储在用户本地终端上的数据,而这些数据通常会经由加密处理。

2024-08-14 21:09:58 1631

原创 Python爬虫技术与应用:Python基本知识介绍

1.HTML解释(1)HTML是指超文本标记语言(Hyper Text Markup Language)。(2)HTML不是一种编程语言,而是一种标记语言(Markup Language)。(3)标记语言是一套标记标签(Markup Tag)。(4)HTML使用标记标签来描述网页。2.HTML标签(1)HTML标签是由尖括号包围的关键词,如。(2)HTML标签通常是成对出现的,如和。(3)标签对中的第一个标签是开始标签,第二个标签是结束标签。(4)开始标签和结束标签也被称为开放标签和闭合标签。

2024-08-14 08:17:36 1560

原创 Python爬虫技术与应用:网络爬虫概述

网络爬虫的不同抓取策略,便是利用不同的方法确定待抓取URL队列中URL的优先顺序。网络爬虫的抓取策略有很多种,但不管方法如何,其根本目标一致。网页的重要性评判标准不同,大部分采用网页的流行性进行定义。网页结构分布图如图1-5所示。

2024-08-13 19:01:32 2703

原创 Python网络爬虫案例实战:并发与 Web:线程

在Python 中使用线程有两种方式:函数或者用类来包装线程对象。第一种:函数式,调用 thread 模块中的 start_new_thread()函数来产生新线程。线程的结束一般依靠线程函数的自然结束;也可以在线程函数中调用thread.exit(),它抛出 SystemExit exception,达到退出线程的目的。

2024-08-13 17:57:37 1340

原创 Python网络爬虫案例实战:并发与 Web:并发和并行、同步和异步、阻塞与非阻塞

Python 支持的并发分为多进程并发与多线程并发。概念上来说,多进程并发即运行多个独立的程序,优势在于并发处理的任务都由操作系统管理,不足之处在于程序与各进程之间的通信和数据共享不方便;多线程并发则由程序员管理并发处理的任务,这种并发方式可以方便地在线程间共享数据(前提是不能互斥)。Python对多进程和多线程的支持都比一般编程语言更高级,最大限度地减少了需要我们完成的工作。

2024-08-13 15:21:13 733

原创 Python网络爬虫案例实战:解析网页:Ixml解析网页

lxml是一个HTML/XML的解析器,主要的功能是如何解析和提取HTML/XML数据。1xml和正则表达式一样,也是用C实现的,是一款高性能的Python HTML/XML解析器,可以利用之前学习的XPath语法,来快速定位特定元素以及节点信息。

2024-08-13 14:27:10 966

原创 Python网络爬虫案例实战:解析网页:PyQuery 解析库

前面介绍了BeautifulSoup 的用法,它是一个非常强大的网页解析库,你是否觉得它的一些方法用起来有点不适用?有没有觉得它的CSS选择器的功能没有那么强大?下面来介绍一个更适合的解析库—PyQuery。PyQuery库是jQuery的Python实现,能够以jQuery的语法来操作解析HTML 文档,易用性和解析速度都很好,使用起来还是可以的,有些地方用起来很方便简洁。

2024-08-13 12:05:08 1714

原创 Python网络爬虫案例实战:解析网页:BeautifulSoup 解析网页

首先介绍BeautifulSoup的对象种类,常用的有标签(bs4.element.Tag)以及文本(bs4.element.NavigableString)等,其中,注解等对象不常用,在此不展开介绍。在标签对象上,可以调用一些查找方法例如find_all等,还有一些属性返回标签的父节点、兄弟节点、直接子节点、所有子节点等。所以如果要爬这样的网站,首先需要把请求伪装成浏览器的样子。具体网站具体分析,经过测试,糗事百科只要设置了UA 就可以爬取到内容,对于其他网站,你需要测试一下才能确定什么设置可用。

2024-08-12 17:13:59 1540

原创 Python网络爬虫案例实战:解析网页:正则表达式解析网页

正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言中,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同;但不用担心,不被支持的语法通常是不常用的部分。图5-1展示了使用正则表达式进行匹配的流程。正则表达式的大致匹配过程是:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。

2024-08-12 14:20:12 1238

原创 Python网络爬虫案例实战:动态网页爬取:selenium爬取动态网页

利用“审查元素”功能找到源地址十分容易,但是有些网站非常复杂。除此之外,有一些数据真实地址的URL 也十分冗长和复杂,有些网站为了规避这些爬取会对地址进行加密。因此,在此介绍另一种方法,即使用浏览器渲染引擎,直接用浏览器在显示网页时解析HTML,应用CSS样式并执行JavaScript的语句。此方法在爬虫过程中会打开一个浏览器,加载该网页,自动操作浏览器浏览各个网页,顺便把数据抓下来。通俗地说,就是使用浏览器渲染方法,将爬取动态网页变成了爬取静态网页。

2024-08-12 11:04:09 1753

原创 Python网络爬虫案例实战:动态网页爬取:什么是Ajax

Ajax(Asynchronous JavaScript and XML)异步JavaScript和XML,即异步的JavaScript 和XML。它不是一门编程语言,而是利用JavaScript在保证页面不被刷新、页面链接不改变的情况下与服务器交换数据并更新部分网页的技术。对于传统的网页,如果想更新其内容,那么必须要刷新整个页面,但有了Ajax,便可以在页面不被全部刷新的情况下更新其内容。

2024-08-12 09:38:18 1093

原创 Python网络爬虫案例实战:动态网页爬取:动态爬取淘宝网实例

之前爬取的网页均为静态网页,这样的网页在浏览器中展示的内容都在HTML 源代码中。但是,由于主流网站都使用JavaScript展现网页的内容,和静态网页不同的是,在使用JavaScript时,很多内容并不会出现在HTML 源代码中,所以爬取静态网页的技术可能无法正确使用。2088802741478045&.biz_order_id=454980960323929555#RateIframe,如图4-1所示,其中的待评论数据就是用JavaScript加载的,这些评论数据不会出现在网页源代码中。

2024-08-11 03:45:55 270

原创 Python网络爬虫案例实战:静态网页爬取:Requests爬虫实践

至此,已经介绍了利用爬虫网络对静态网页进行爬取,下面直接通过两个实例来演示爬虫的实践。

2024-08-11 03:38:42 2323

原创 Python网络爬虫案例实战:静态网页爬取:自定义请求头部

【代码】Python网络爬虫案例实战:静态网页爬取:自定义请求头部。

2024-08-11 02:06:48 185

原创 Python网络爬虫案例实战:静态网页爬取:代理访问

采集时为避免被封IP,经常会使用代理。Requests也有相应的proxies属性。

2024-08-11 01:52:52 266

原创 Python网络爬虫案例实战:静态网页爬取:设置超时

有时爬虫会遇到服务器长时间不返回,这时爬虫程序就会一直等待,造成爬虫程序没能顺利地执行。因此,可以用 Requests在 timeout参数设定的秒数结束之后停止等待响应。也就是说,如果服务器在timeout 秒内没有应答,就返回异常。把这个秒数设置为0.001秒,看看会抛出什么异常,这是为了让大家体验timeout异常的效果而设置的值,一般会把这个值设置为20秒。

2024-08-11 01:33:59 202

原创 Python网络爬虫案例实战:静态网页爬取:发送POST请求

除了GET请求外,有时还需要发送一些编码为表单形式的数据,如在登录的时候请求就为POST,因为如果用 GET请求,密码就会显示在URL 中,这是非常不安全的。如果要实现POST请求,那么只需要简单地传递一个字典给Requests中的data参数,这个数据字典就会在发出请求的时候自动编码为表单形式。可以看到,form变量的值为key_dict输入的值,这样一个POST请求就发送成功了。

2024-08-11 01:25:27 373

原创 Python网络爬虫案例实战:静态网页爬取:定制请求头

请求头 Headers提供了关于请求、响应或其他发送实体的信息。对于爬虫而言,请求头十分重要,尽管在上一个例子中并没有制定请求头。如果没有指定请求头或请求的请求头与实际网页不一致,就可能无法返回正确的结果。Requests并不会基于定制的请求头 Headers的具体情况改变自己的行为,只是在最后的请求中,所有的请求头信息都会被传递进去。由结果可以看到是以字典的形式返回了全部内容,也可以访问部分内容。而请求头内容可以用r.request.headers来获取。

2024-08-09 19:55:00 407

原创 Python网络爬虫案例实战:静态网页爬取:获取网页编码

在Requests中,可以用r.status_code来检查网页的状态码。能正常打开的返回200,不能正常打开的返回404。

2024-08-09 18:28:36 229

原创 Python网络爬虫案例实战:静态网页爬取:获取响应内容

r.content是以字节的方式去显示,所以在IDLE 中以b开头。但在cygwin 中用起来并没有,下载网页正好,所以就替代了urllib2的urllib2.urlopen(url).read()功能。在 Requests中,还会自动将内容转码,大多数 unicode字体都会无缝转码。此外,还可以通过r.content来获取页面内容。在Requests中,可以通过r.text来获取网页的内容。

2024-08-09 18:11:16 273

原创 Python网络爬虫案例实战:静态网页爬取:传递URL参数

为了请求特定的数据,需要在 URL的查询字符串中加入某些数据。如果你是自己构建URL,那么数据一般会跟在一个问号后面,并且以键-值的形式放在 URL 中,如http://httpbin.org/get?在 Requests中,可以直接把这些参数保存在字典中,用params构建至URL中。

2024-08-09 18:01:19 371

原创 Python网络爬虫案例实战:静态网页爬取:JSON数据库

JSON 全称为JavaScript Object Notation,也就是JavaScript对象标记,它通过对象和数组的组合来表示数据,构造简洁但是结构化程度非常高,是一种轻量级的数据交换格式。下面进行简单的介绍,第7章将对其进行详细介绍。

2024-08-09 17:45:51 278

C盘一键清理,清除微信、QQ等垃圾文件

C盘一键清理,清除微信、QQ等垃圾文件

2024-08-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除