spider 05-min.png
  • Madman
  • ·

Python3爬虫系列05 (实验) - 多线程并发下载

I/O密集型最适合使用多线程,当然包括网络I/O。我们要下载多张图片,每次去下载一张图片,就是发起一次HTTP请求(使用TCP协议),客户端首先通过socket.socket()创建一个套接字,然后调用connect()方法经过三次握手与服务端建立TCP连接,这个过程是阻塞的。建立连接后,客户端将请求(要访问图片资源)发送给服务端,然后服务端返回响应,客户端用recv()方法每次接收一定数量...

spider 03-min.jpg
  • Madman
  • ·

Python3爬虫系列03 (实验) - 同步阻塞下载

从这一篇开始,将介绍如何用Python3实现网络爬虫,多任务快速抓取你想要的数据。每一次HTTP请求--响应要经过TCP三次握手、客户端发送请求数据、服务端分多次返回响应数据,这个过程中,客户端的CPU在等待网络I/O时会阻塞。Python依序下载是一个主线程依次等待每个网络I/O完成,而多线程是多个线程并发(不是并行)等待多个网络I/O,当一个线程因为等待网络I/O而阻塞时,会自动切换到另...

spider 02-min.jpg
  • Madman
  • ·

Python3爬虫系列02 (理论) - Python并发编程

本文是整个爬虫系列的理论基础,试想一下,如果你的爬虫只能一次下载一张图片,那要爬完整个图片网站的时间会让人抓狂,所以我们需要让程序能够并发,同时请求多张图片资源,因为网络传输时间对于CPU来说太漫长了,并发的好处是可以合理的解决CPU和网络I/O之间的速度鸿沟

  • Madman
  • ·

Python3排序算法06 - 快速排序

快速排序通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列

  • Madman
  • ·

Python3排序算法05 - 归并排序

归并排序(Merge Sort)是建立在归并操作上的一种有效的排序算法,它将已经有序的子序列合并,得到完全有序的序列。也就是说,先使每个子序列有序(单个元素组成的序列肯定是有序的),再将两个有序序列合并成一个更大的有序序列。该算法是采用分治法(Divide and...

  • Madman
  • ·

Python3排序算法04 - 希尔排序

希尔排序按其设计者希尔(Donald Shell)的名字命名,该算法由1959年公布。希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性地朝最终位置前进一大步。然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序,但是到了这步,需排序的数据几乎是已排好的了(此时插入排序较快)

  • Madman
  • ·

Python3排序算法03 - 插入排序

插入排序是一种简单直观的排序算法,它的工作原理非常类似于我们抓扑克牌,对于未排序数据(右手抓到的牌),在已排序序列(左手已经排好序的手牌)中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用 in-place sorting,即只需用到 O(1) 的额外空间的排序,因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间