摘要: http://blog.csdn.net/pi9nc/article/details/9734437 一、网络爬虫的定义网络爬虫,即Web Spider,是一个很形象的名字。把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛。网络蜘蛛是通过网页的链接地址来寻找网页的。从网站某一个页面... 阅读全文
posted @ 2014-08-25 22:33 枫桦宁 阅读(467) 评论(0) 推荐(0) 编辑
摘要: Greenlet简介一个 “greenlet” 是一个很小的独立微线程。可以把它想像成一个堆栈帧,栈底是初始调用,而栈顶是当前greenlet的暂停位置。你使用greenlet创建一堆这样的堆 栈,然后在他们之间跳转执行。跳转不是绝对的:一个greenlet必须选择跳转到选择好的另一个greenlet,这会让前一个挂起,而后一个恢复。两 个greenlet之间的跳转称为切换(switch)。当你创建一个greenlet,它得到一个初始化过的空堆栈;当你第一次切换到它,他会启动指定的函数,然后切换跳出greenlet。当最终栈底 函数结束时,greenlet的堆栈又编程空的了,而greenlet 阅读全文
posted @ 2014-01-08 08:28 枫桦宁 阅读(1629) 评论(0) 推荐(0) 编辑
摘要: 最近在写爬虫 ,对于这几个概念比较模糊,所以特意学习了一下。进程(process):进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。线程(thread):线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。微线程:又叫协程。 tasklet运行在伪并发中,使用channel 阅读全文
posted @ 2014-01-06 11:56 枫桦宁 阅读(5616) 评论(5) 推荐(9) 编辑
摘要: 原创博文,转载请注明出处。单线程爬取:所用模块urllib2,re 1 # -*- coding: cp936 -*- 2 import urllib2 3 import re 4 5 def main(): 6 url="http://www.baidu.com/" 7 req = urllib2.Request(url) 8 resp = urllib2.urlopen(req) 9 respHtml = resp.read()10 #使用百度前必读 ,匹配内容11 ahn='(?P.+)'12 found=re.search(ahn,re... 阅读全文
posted @ 2014-01-03 09:30 枫桦宁 阅读(820) 评论(0) 推荐(0) 编辑
摘要: 原创博文,转载请注明出处利用周六周末的时间把几种基本的排序方法用python实现了一下,废话少说,直接上代码。本文不注重基础知识的讲解,只做大致的描述,大家如果不清楚概念,自行查找资料。直接插入排序: 每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。 1 def insert(arr): 2 l = len(arr) 3 for i in range(1,l): 4 if arr[i]=0 and arr[j]>temp:10 arr[j+1]=arr[j] #元素后移11 ... 阅读全文
posted @ 2013-12-17 15:49 枫桦宁 阅读(1409) 评论(4) 推荐(1) 编辑
摘要: 原创博文,转载请注明出处今天在学习python进程与线程时,无意间发现了线程池threadpool模块,见官方文档。模块使用非常简单,前提是得需要熟悉线程池的工作原理。我们知道系统处理任务时,需要为每个请求创建和销毁对象。当有大量并发任务需要处理时,再使用传统的多线程就会造成大量的资源创建销毁导致服务器效率的下降。这时候,线程池就派上用场了。线程池技术为线程创建、销毁的开销问题和系统资源不足问题提供了很好的解决方案。优点: (1)可以控制产生线程的数量。通过预先创建一定数量的工作线程并限制其数量,控制线程对象的内存消耗。(2)降低系统开销和资源消耗。通过对多个请求重用线程,线程创建、销毁的.. 阅读全文
posted @ 2013-12-12 20:06 枫桦宁 阅读(10872) 评论(0) 推荐(0) 编辑
摘要: 为何要将URL地址进行编码 然后发送到服务器端?协议规范:RFC 1738,定义了,url地址中,不能包含,除了,0-9的数字,大小写字母(a-zA-Z),短横线’-’之外的字母,但是我们的URL中不止这些字符还有一些特殊字符比如$-_.+!*’(),这时候就需要我们进行编码传输。编码很简单,就是将其值变为%xx而已,而xx就是该字符的16进制值而已。下面的表取自百度百科,大家可以参考一下。backspace %08I %49v %76ó %D3tab %09J %4Aw %77Ô %D4linefeed %0AK %4Bx %78Õ %D5 阅读全文
posted @ 2013-12-10 20:29 枫桦宁 阅读(3607) 评论(3) 推荐(2) 编辑
摘要: 原创博文,转载请注明出处。GCC的编译过程分为预处理、生成汇编代码、生成目标代码和链接成可执行文件等4个步骤。使用vim编写C 文件 : [lining@localhost program]$ vim hello.c 这样就会在program文件夹生成hello.c文件编译C代码:使用如下命令“gcc 代码文件名” 如: [lining@localhost program]$ gcc hello.c 这样就会生成二进制可执行文件名称位a.out。 如果需要指定输出的文件名称,使用 “gcc -o 代码文件名” 如:[lining@localhost program]$ gcc -o hello 阅读全文
posted @ 2013-12-09 16:00 枫桦宁 阅读(1188) 评论(3) 推荐(4) 编辑
摘要: 原创博文,转载请注明出处。队列也是一种线性表,但是只允许在表的一端进行插入,而在表的另一端进行删除。其操作特性是先进先出。队列常应用在在层次遍历中(如对二叉树的遍历),计算机系统中,也常用来解决如主机与外部设备之间速度不匹配的问题,和由多用户引起的资源竞争问题。队头(front):允许删除的一端,又称队首。队尾(rear): 允许插入的一端。空队列:不含任何元素的空表。队列的顺序存储 比较简单,下面我们学习一下队列的链式存储结构。队列的链式存储类型可描述为1 typedef struct{ //链式队列节点2 ElemType d... 阅读全文
posted @ 2013-12-05 15:48 枫桦宁 阅读(1848) 评论(0) 推荐(1) 编辑
摘要: 原创博文,转载请注明出处栈(Stack)是一种线性表,但是只允许在一端进行插入或删除操作。栈的顺序存储成为顺序栈,它是利用一组地址连续的存储单元存放自栈底到栈顶的数据元素,同时附设一个指针(top)指示当前栈顶的位置。栈的顺序存储类型可描述为1 #define MaxSize 502 typedef struct{3 Elemtype data[MaxSize];4 int top 5 }SqStack初始时设置S.top=-1,栈顶元素:S.data[S.top]栈空条件:S.top==-1;栈满条件:S.top==MaxSize-1;栈长:S.top+... 阅读全文
posted @ 2013-11-27 19:41 枫桦宁 阅读(1927) 评论(0) 推荐(0) 编辑