python总结:部分知识点

1.字典排序

按照value值大小排序

>>> d = {'75': '8', '12': '9', '14': '3', '88': '14', '60': '14', '61': '13', '62': '8', '63': '9', '64': '10', '65': '9', '7': '13', '9': '11', '8': '11'}
>>> sorted(d.items(), key = lambda x:int(x[1]))[('14', '3'), ('75', '8'), ('62', '8'), ('63', '9'), ('65', '9'), ('12', '9'), ('64', '10'), ('9', '11'), ('8', '11'), ('61', '13'), ('7', '13'), ('88', '14'), ('60', '14')]

2.xshell

screen -D -r 窗口名 # 进入attach状态下的screen

rz -be # 可以传输大的文件

sz -y # 可以不用删除已有文件上传重名文件(覆盖源文件)

3.cookie与session

cookie和session都是用来跟踪浏览器用户身份的会话方式。由于HTTP协议是无状态的(每一次请求都是独立的,协议对于事物处理没有记忆能力),为解决该问题出现了cookie和session。cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。


cookie信息保存在浏览器(客户端)中;

cookie由服务器产生,浏览器收到请求后保存到本地,当浏览器再次向服务器发出请求时,会带上cookie,这时服务器就能知道当前发出请求的是“谁”了;

但由于cookie保存在客户端本地,所以安全性低,很容易被查看和破解;

cookie分两类:

会话cookie:没有设置过期时间,保存在浏览器的内存中,关闭浏览器,cookie会被销毁

普通cookie:设置了过期时间,保存在硬盘上


session信息(用户信息、登录状态等)保存在服务器端;

session信息因为保存在服务器端,不会像cookie一样在发送请求时候被拦截,所以有较高的安全性,而且session可以支持更多的字节,保存更多的东西。

使用Python中的requests模块的session对象,可以跨请求保持某些参数,也会在同一个session实例发出的所有请求之间保持cookies不同的客户端在向服务器发送请求时,服务器都会先检查请求中有没有session标识(也就是session id),如果包含则说明服务器为该客户端创建过session,然后就可以通过session id找到该客户端相关的session信息(这样在登录的时候就不用每次都发送一堆信息给服务器了);如果客户端是第一次与服务器建立连接,服务器会为客户端创建一个session,并分配一个与之关联的session id,通常客户端保存这个session id的方式就是使用cookie了。

在爬虫中的应用:

a、某些请求中需要带有特定的cookie值才能进行正常访问;

b、需要登录才能抓取数据的时候,最好使用session,因为复杂一些的登录过程,会发生多次跳转,每次跳转都会在本地执行不同的set-cookies操作,使用session就可以保存这些cookie信息。

参考链接:http://justsee.iteye.com/blog/1570652

4.常用的字符串方法

这里只是列举一下我常用到的方法:

replace,strip,lstrip,rstrip,lower,upper,title,count,endswith,startswith,find,rfind,index,split,join。

具体可以参考这篇文章:python字符串(string)方法整理

5.python装饰器

python装饰器小结

装饰器作用:

引入日志、函数执行时间统计、执行函数前预备处理、执行函数后的清理功能、权限校验等场景和缓存等。

6.HTTP请求中的GET和POST

get请求用于信息获取,从服务器上获取数据;

post请求一般用于修改服务器上的资源,所以post是向服务器传送数据;

get请求也可以传送数据,但是get方式提交的数据有长度限制,最多1024个字节;使用get请求提交的数据(参数)是通过url提交的,是可见的,容易暴露,所以安全性低;post请求提交的数据是放在header中,不可见,安全性相对较高。

当然,在数据未加密情况下,两个请求的安全级别其实是一样的,任何一种监听器都能把所有数据监听到。

7.什么是lambda函数?使用它的好处?

匿名函数,可以快速定义的单行的最小函数。

好处是轻便,适合需要完成某一项简单功能。

参考资料:python中lambda函数的理解与使用

8.GIL

Global Interpreter Lock(全局解释器锁)。

Python代码的执行由Python 虚拟机(也叫解释器主循环,CPython版本)来控制。对Python 虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁能保证同一时刻只有一个线程在运行(每个线程在执行前都需要先获取GIL,即保证同一时刻只有一个线程对共享资源进行存取)。

但是也正是因为GIL,我们在使用多线程的时候只能实现并发,却不能实现并行。

并发:交替处理多个任务(吃饭的时候,来了一个电话,停止吃饭接电话,接电话后才继续吃饭);

并行:同时处理多个任务(吃饭的时候,来了一个电话,边吃饭边打电话);

什么情况下线程会释放GIL:线程遇到I/O阻塞时,会释放GIL,给另一个线程执行的机会。

所以对于多核CPU,使用多进程才能更好的利用CPU资源。当然,多线程爬取肯定还是会比单线程爬取效率更高,因为遇到I/O阻塞时会自动释放GIL锁。

参考:深入理解python多线程与GIL

9.yield关键字

一个带有 yield 的函数就是一个 generator,它和普通函数不同,生成一个 generator 看起来像函数调用,但不会执行任何函数代码,直到对其调用 next()(在 for 循环中会自动调用 next())才开始执行。虽然执行流程仍按函数的流程执行,但每执行到一个 yield 语句就会中断,并返回一个迭代值,下次执行时从 yield 的下一个语句继续执行。看起来就好像一个函数在正常执行的过程中被 yield 中断了数次,每次中断都会通过 yield 返回当前的迭代值。

参考:Python yield 使用浅析

10.scrapy

scrapy是封装起来的框架,他包含了下载器,解析器,日志及异常处理,基于多线程, twisted的方式处理,对于固定单个网站的爬取开发,有优势,但是对于多网站爬取 100个网站,并发及分布式处理方面,不够灵活,不便调整与括展。

优点:scrapy 是异步的、采取可读性更强的xpath代替正则、强大的统计和log系统、同时在不同的url上爬行、支持shell方式,方便独立调试、写middleware,方便写一些统一的过滤器、通过管道的方式存入数据库。

缺点:基于python的爬虫框架,扩展性比较差、基于twisted框架,运行中的exception是不会干掉reactor,并且异步框架出错后是不会停掉其他任务的,数据出错后难以察觉。

scrapy框架运行的机制:从start_urls里获取第一批url并发送请求,请求由引擎交给调度器入请求队列,获取完毕后,调度器将请求队列里的请求交给下载器去获取请求对应的响应资源,并将响应交给自己编写的解析方法做提取处理:1. 如果提取出需要的数据,则交给管道文件处理;2. 如果提取出url,则继续执行之前的步骤(发送url请求,并由引擎将请求交给调度器入队列...),直到请求队列里没有请求,程序结束。

11.常见的反爬虫

通过headers反爬虫、基于用户行为反爬虫(限制同一ip的请求次数)、动态页面的反爬虫(ajax--异步的js和xml数据)

12.分布式爬虫主要解决什么问题

ip、带宽、cpu、io

13.HTTP状态码

HTTP状态码

14.使用xpath表达式如何通过文本内容定位HTML标签

以“https://www.zhihu.com/”为例,寻找文本内容为“登录”的HTML标签的xpath表达式就是://span[contains(text(), '登录')]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容