1 Python的函数参数传递
对象有两种,“可更改”(mutable)与“不可更改”(immutable)对象。在python中,strings, tuples, 和numbers是不可更改的对象,而list,dict等则是可以修改的对象。可变的有:数组、集合、字典;不可变的有:字符串、元组、数
2 @staticmethod和@classmethod
对于实例方法,我们知道在类里每次定义方法的时候都需要绑定这个实例,就是foo(self, x),为什么要这么做呢?因为实例方法的调用离不开实例,我们需要把实例自己传给函数。
3 Python自省
自省就是面向对象的语言所写的程序在运行时,所能知道对象的类型.简单一句就是运行时能够获得对象的类型.比如type(),dir(),getattr(),hasattr(),isinstance()
dir() 函数一个排好序的字符串列表
4 迭代器和生成器
当你创建了一个列表,你可以一个一个的读取它的每一项,这叫做iteration. 生成器也是迭代器的一种,但是你只能迭代它们一次.原因很简单,因为它们不是全部存在内存里,它们只在要调用的时候在内存里生成。
5 *args and **kwargs
当你不确定你的函数里将要传递多少参数时你可以用*args。**kwargs允许你使用没有事先定义的参数名。
6 Python中重载
仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的,此时才使用函数重载,如果两个函数的功能其实不同,那么不应当使用重载,而应当使用一个名字不同的函数。
7 __new__和__init__的区别
__new__方法会返回一个创建的实例,而__init__什么都不返回. 当创建一个新实例时调用__new__,初始化一个实例时用__init__.
8 lambda函数
lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数
9 Python垃圾回收机制
要使用引用计数(reference counting)来跟踪和回收垃圾。
10 编译
编译过程就是把预处理完的文件进行一系列的词法分析、语法分析、语义分析及优化后生成相应的汇编代码文件。这个过程是整个程序构建的核心部分。
11 汇编
汇编器是将汇编代码转化成机器可以执行的指令,每一条汇编语句几乎都是一条机器指令。经过编译、链接、汇编输出的文件成为目标文件(Object File)
12 HTTP中Get与Post的区别
GET一般用于获取/查询资源信息,而POST一般用于更新资源信息
13 正则表达式
正则表达式的大致匹配过程是:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。\d数字,\D非数字
14 cookie
1. Cookie 是浏览器访问服务器后,服务器传给浏览器的一段数据。2. 浏览器需要保存这段数据,不得轻易删除。3. 此后每次浏览器访问该服务器,都必须带上这段数据。Cookie 一般有两个作用。第一个作用是识别用户身份。第二个作用是记录历史。
发送请求——获得页面——解析页面——下载内容——储存内容
1. re模块
Python通过re模块提供对正则表达式的支持。使用re的一般步骤是先将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例),最后使用Match实例获得信息,进行其他的操作。match(),search(),sub(),split(),findall,
2. beautiful soup
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库。
使用BeautifulSoup解析这段代码,能够得到一个 BeautifulSoup 的对象,并能按照标准的缩进格式的结构输出。for link in soup.find_all('a'): 可以用tag, class, id来定位我们想要的东西, 可以直接提取出正文信息, 可以全文搜索, 同样也支持正则表达式
Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:Tag,NavigableString,BeautifulSoup,Comment
3. request 库
r = requests.get(url='http://www.itwhy.org')能够发送get和post请求。使用requests方法后,会返回一个response对象,其存储了服务器响应的内容。
requests库提供了http所有的基本请求方式。如果一个响应中包含了cookie,那么我们可以利用 cookies 变量
4. urllib库
调用的是urllib2库里面的urlopen方法,传入一个URL,再read就得到了源码。
有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性。urllib2 默认会使用环境变量 http_proxy 来设置 HTTP Proxy。可以利用Urllib2库保存我们登录的Cookie,然后再抓取其他页面就达到目的了
5. phantomJS
如果页面不是单纯的HTML代码,而是被JS渲染的页面,就要使用phantomJS模块。
框架
1. Scrapy
Scrapy运行流程大概如下:
首先,引擎从调度器中取出一个链接(URL)用于接下来的抓取
引擎把URL封装成一个请求(Request)传给下载器,下载器把资源下载下来,并封装成应答包(Response)
然后,爬虫解析Response
若是解析出实体(Item),则交给实体管道进行进一步的处理。
若是解析出的是链接(URL),则把URL交给Scheduler等待抓取
2.
Python2,python3
Decode,encode,string-bytes
除法运算
不等式运算符
装饰器是一种特殊的函数,要么接受函数作为输入参数,并返回一个函数,要么接受一个类作为输入参数,并返回一个类。
python是一种解释型语言。这就是说,与C语言和C的衍生语言不同,Python代码在运行之前不需要编译。Python是动态类型语言,指的是你在声明变量时,不需要说明变量的类型。你可以直接编写类似x=111和x="I'm a string"这样的代码,程序不会报错。Python非常适合面向对象的编程(OOP)。
python并不支持真正意义上的多线程。Python中提供了多线程包.GlobalInterpreter Lock(GIL)的东西,它会确保任何时候你的多个线程中,只有一个被执行。线程的执行速度非常之快,会让你误以为线程是并行执行的,但是实际上都是轮流执行。如果你想同时执行一些任务,而且不考虑效率问题,那么使用这个包是完全没问题的,而且也很方便.