美文网首页
python总结:部分知识点

python总结:部分知识点

作者: Elvis_zhou | 来源:发表于2018-08-29 16:34 被阅读0次

    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(), '登录')]

    相关文章

      网友评论

          本文标题:python总结:部分知识点

          本文链接:https://www.haomeiwen.com/subject/sbdkwftx.html