1. Python中的编码格式你用过哪些?utf-8, gbk, gb2312, ascii, gb18030
2. 列举使用过的装饰器@classmethod、@staticmethod、@property
3. 参数*args和**kwargs的区别 *args不定长参数,传入函数中是一个元组, **kwargs 不定长关键字参数,以key=value形式传递参数,传入函数中是一个字典
4. list1 = [x for x in range(10) if x%2 ==0],则打印list1的结果是[0,2,4,6,8]
5. 匿名函数的关键字是: lambda,声明函数的关键字def ,声明类的关键字class
6. 书写以下CSS样式代码:1. div边框为1像素、红色、虚线:border: 1px red _dalish 2. div边框圆角、半径为20像素:border-radius:20px; 3. div盒子阴影,向右下角偏移、黑色、模糊度10像素: box-shadow: 1px 1px 10px black
7. 相对定位和绝对定位的区别:1. 相对定位相对自己原来的位置做位置微调,本身不会被浮动到上层2. 绝对定位相对浏览器边框做位置调整,本身会被浮动到上层
8. 书写以下在CSS中查找标签的方式:1. 查找id为current的p标签:#current 2. 查找class为list-item的所有div标签:.list-item 3. 查找div下所有的span标签:div span 4. 查找div下所有的的直接子标签section: div > section
9. Scrapy创建项目、创建爬虫、运行爬虫的命令分别为scrapy startproject 项目名,scrapy genspider 爬虫名 主机域名,scrapy crawl 爬虫名
10. 列举常用的数据解析方式及解析用到的包 1. 正则表达式 re 2. xpath lxml 3. json解析 json 4. bs4 BeautifulSoup
11. 写一个用于匹配所有class=”red”的标签包裹的文本数据的正则表达式<.*?class=”red”.*?>(.*?)
12. 连接MySql数据库的命令为mysql -u用户名 -p密码
13. map()、filter()、reduce()函数的作用
1. map(lambda x:x*x, [1,2,3,4,5,6,7,8,9]) 让可迭代对象中的每一个元素都执行一次某个函数,并将执行函数返回的结果放入新的列表中
2. Filter()让可迭代对象中的每一个元素都执行一次某个函数,并将函数返回为真(不是None、空字符串、0、False)的数据放入新的迭代器对象中
3. Reduce() 让可迭代对象中的每两个个元素都执行一次某个函数,并将执行结果和下一个元素进行再次运算,直至没有元素为止,返回的是一个结果
14. 列举你使用过的数据库sqlite3、mysql、mongodb、redis及操作对应数据库的第三方包sqlite、pymysql、pymongo、redis
15. 写一句代码计算1到100的和 sum(range(1,101)) 或者 reduce(lambda x,y:x+y, [x for x in range(1,101)])
16. 列举网络爬虫所用到的网络请求包urllib|requests、解析包re|bs4|json|lxml、数据抓包工具fiddler及使用方法:手机和电脑连同一个网段,设置手机wifi代理为电脑ip,手机端安装证书,开启fiddler进行抓包
17. 有两个变量x=5,y=8,给出不使用第三个变量实现交换x与y变量的值的方法x,y=y,x
18. 有列表a = [1,2,3,4,5,6,7,8,9],给出得到列表a中偶数列表b=[2,4,6,8]的一行代码map(lambda x: if x%2==0, a) ,给出不使用for循环能够生成列表a的一行代码range(1,10) [x for x in range(1,10)]
19. 给出同时遍历字典a的key,vlaue的办法for key,vlaue in a.items()
20. 给出同时遍历列表a的index,value的办法for idx ,value in enumerate(a)
21. 如果模块test.py是被导入的,__name__的值是test,如果模块test.py是被直接执行的,__name__的值是__main__
22. 表达式[1,2,3]*3的执行结果为[1,2,3,1,2,3,1,2,3]
23. 表达式int(4**0.5)的值为__2___
24. Django创建项目命令django-admin startproject 项目名创建application命令python manage.py startapp app名称 运行项目命令python manage.py runserver
25. 简述你使用过的Python中的装饰器,并说明它们的作用
1. @classmethod 类函数装饰器,装饰的函数可以由类和对象调用,默认参数cls表示类
2. @staticmethod 静态函数装饰器,装饰的函数可以由类和对象调用,没有默认参数
3. @property 描述装饰器 装饰的函数可以通过对象.函数(不加括号) 直接调用
4. @eat.setter 对象.eat = 值 会调用该函数
1. 面向对象的特点是?封装、继承、多态
2. 简述类和对象的概念,并举例说明
1. 类:具有相同属性和行为方法的事物的抽象集合,人类、植物类....
2. 对象:类的具体的实例 人类中的你自己.....
3. 简述类继承的特点
1.子类继承父类,子类可以使用父类的所有属性和函数
2.子类继承父类,子类可以添加自己的属性函数,父类不能使用子类添加的属性函数
3.子类继承父类,子类可以重写父类的函数:1.部分重写 2.完全重写
4. 详细说说list、dict的用法,它们的特点和区别?
1. list存储任意类型的数据,按照索引进行排序,第一个元素索引为0,第二个为1...依次类推,
2. dict存储任意类型的数据,数据以key:value的形式存放在字典中,key是唯一且不可变的
3. list和dict中的数据都可以进行增删改查
5. 分别写出list、dict中常用的五个函数及作用
list: append()追加 insert()插入 clear()清空 pop()移出 remove()删除 copy()拷贝 sort()排序 reverse()反向排序 extends()扩展
dict: clear()清空 pop()移出 popitem()移出一个key个value keys()获取所有key values()获取所有值 items()获取所有key和值 update()更新 get()根据key获取值
6. pass的作用是什么?
保证代码完整性,若函数或代码块中暂无要执行的功能代码,可以使用pass占位,保证代码不出错
7. def eat(name, money=10): 函数中两种参数形式有什么不同?
1. name是必要参数,这个参数在调用时必须传递
2. money 是缺省参数,调用函数时可以选择传递,也可以不传递,默认值为10
8. GET请求方式和POST请求方式的区别是什么?
1. 参数位置
get请求参数放在url之后,以?分割,多个参数之间用&符号链接
Post请求参数放在请求体中,每个参数之间用&符号链接
2. 安全性
get请求参数直接在url地址中明文显示,只要能获取到url地址,就可以将隐私数据提取,不安全
Post请求,由于参数是放在请求体重的,不会明文显示,相对来说比较安全
3. 请求参数长度
理论上url地址没有长度限制的,但是浏览器会对url做长度限制,一般的浏览器url地址长度不能超过2048个字节,所以get请求参数是有长度限制的
post请求,请求数据放在请求体中,没有长度限制,但实际情况会根据服务器端的要求作出限制
4. 应用场景
get请求一般用于获取服务器资源
Post请求一般用于向服务器提交资源
9. 请求报文和响应报文结构
请求报文
请求方法 请求地址 协议版本 请求行部分
请求头部分
请求数据
响应报文
协议版本 状态码 原因短语 状态行
响应头
响应数据
10.简述反爬虫措施及应对方案(反爬虫指服务器采用的检测爬虫,禁止爬虫的方式)
1. User-Agent 中如果携带python标识,禁止访问
2. 模拟浏览器的User-Agent,可以搜索多个浏览器请求头,每次发请求随机取一个
3. 要求用户登录后进行访问 解决:登录之后找到cookie,每次发送请求携带上cookie
4. 封ip, 使用代理ip
11.简述如何应对目标服务器对爬虫程序的限制
1. 判断请求头中的部分内容,是否符合要求 模拟请求头
2. 假设同一个ip段访问太过频繁,限制ip访问速度或封杀整个ip段 使用代理ip
3. 如果访问频繁,会要求用户登录之后进行访问。模拟登陆,获取登陆后的cookie,每次请求携带cookie即可
4. 如果同一个用户访问频繁,会限制该用户访问,甚至封禁帐号 申请多账户,爬虫之前登陆所有帐号,获取登陆帐号的cookie,每次请求随机取出一个cookie
5. 爬虫中需要进行验证码验证, 云打码 解决验证码 字母数据 滑块\点触\倒立文字\拼图滑块
6. 数据加密,直接返回的数据时加密后的数据 尝试解密 使用selenium完全模拟用户行为,爬取数据(比较慢)
7. 反爬成本太高,放弃....
12.try语法的作用是什么?列举你遇到的至少3中错误类型
1. try用来做异常捕获,程序运行期间一旦代码运行出现错误,会导致程序直接终止运行,通过异常捕获可以在程序运行期间,一旦出错,在except中处理这个错误,程序可以继续向下执行,不会影响后续代码的运行
Try:
要检测异常的代码
Except Exception as e :
出现异常、处理异常的代码
Else:
没有出现异常执行的代码
Finally:
无论是否出现异常,最后都会执行这段代码
2. IndexError 索引错误 KeyError key错误 ValueEroor 值错误 TypeError类型错误 AttrError 属性错误........
13. 简述python如何管理内存
Python是自动管理内存的,通过引用计数进行管理,当对象被创建时,引用计数为1,当对象被引用时,引用计数+1,当引用结束时,计数-1,计数为0时,对象被释放
14. *args和**kwargs的区别是什么?
*args 不定长参数 传递到函数中是一个元组类型,可传递多个参数
**kwargs 关键字不定长参数 传递到函数中是一个字典类型,可传递多个参数,传递参数形式 key=value
15. 简述map()、filter()、reduce()函数的作用
Map() 让可迭代对象中的每一个元素都执行一次函数,并将函数返回的结果放入一个新的可迭代对象中,并返回这个可迭代对象
Filter()让可迭代对象中的每一个元素都执行一次函数,将函数返回的结果进行筛选,把所有为真的结果放入一个新的可迭代对象中,并返回这个可迭代对象
Reduce() 让可迭代对象中的每两个个元素执行一次函数,将两个元素计算的结果和第三个元素继续调用函数,依次类推,直到计算出最后一个结果,并返回这个结果
16. 正则表达式match()和search()函数的区别是什么?
Match() 某个字符串必须以正则表达式开头,才会查找到
Search() 无论正则表达式匹配的字符串在任何位置,都可以搜索到
17. 用列表生成式实现下列功能
1. 创建list1,存放1-100(包含100)中既是2又是3倍数的数字
方法一:[x for x in range(1,101) if x % 2==0 and x%3 == 0]
方法二:[x for x in range(1,101) if x % 6 == 0]
2.现有列表list1=[‘张三’,’李四’.....],请将list1中所有以’张’开头的名字放到list2中
方法一:[name for name in list1 if name.startsswith(‘张’)]
方法二:[name for name in list1 if name[0] == ‘张’]
18. 请以字符串格式化输出的形式输出以下内容, name=”张%哈哈%三” age=20 address=”河南郑州”, 输出格式为: ”我叫***,我今年***岁,我家在***”
Print(‘我叫%s,我纪念%s岁,我家在%s’ % (name,age,address))
Print (‘我叫{},我纪念{}岁,我家在{}’.Format(name,age,address))
19. 请用reduce()函数+匿名函数实现100以内数字求和
Def calc(x,y):
Return x +y
S = reduce(calc, [for x in range(100)])
或者:
S = reduce(lambda x,y:x+y, [for x in range(100)])
20. 用列表推导式实现下列功能
a)创建list1,存放1-100(包含100)中既是2又是3倍数的数字
[x for x in range(1,101) if x%6==0]
[x for x in range(1,101) if x%2==0 and x%3==0]
b)现有列表list1,请将列表1中所有以’张’开头的名字放到list2中
list1 = ['张三','李四']
list(filter(lambda x:x if x.startswith('张') else None ,list1 ))
21. 在scrapy中如何自定义随机请求头?需要实现什么函数?
fake_useragent 第三包
自定义middleware ,在middleware中process_request()函数中,通过fake_useragent设置request的请求头
From fake_useragent import UserAgent
Def RandomUAMiddleware(object):
Def __init__(self):
Self.ua = UserAgent()
Def process_request(self, request, spider):
Request.headers.setDefault(b’User-Agent’, self.ua.random)
在settings中Download_MIDDLEWARE 中配置定义的RandomUAMiddleware,取消默认使用的scrapy.downloadermiddleware.useragent.UserAgentMiddleware,设置为None即可
22. 写出下列SQL语句
1. 创建一张学生表,包含姓名,年龄,学号(主键),性别,成绩等五个字段,类型自己定义
CREATE TABLE stuednts(name text,age integer ,id integer primary key,sex text,score integer)
2. 向表中插入1条数据,张三,20,10086,男,95
INSERT INTO students(name,age,id,sex,score)values(........)
3. 查询年龄大于20的学生的姓名和学号
Select name ,id from students where age>20
4. 更新姓名为张三的学生姓名为李四
Update students set name=’李四’ where name=’张三’ \ name like ‘张三’
5. 删除所有姓名以张开头的学生信息
Delete from student where name like ‘张%’
6. 按成绩降序排序,查询学号、姓名、年龄字段
Select id ,name ,age from student order by score DESC
7. 写出Python操作MySQL的用法,并分别写出创建表、插入数据、删除数据、修改数据、查询所有数据的SQL语法
Import pymysql
Db = pymysql.connect(
Host=’127.0.0.1’,
Port=3306,
Db=’’,
User=’’,
Password=’’.
Use_unicode=True,
Charset=’’
)
Curosor = db.cursor()
Cursor.execute(sql)
Db.commit()
Cursor.close()
Db.close()
CREATE TABLE 表名 (字段 类型 约束, 字段 类型 约束.....)
INSERT INTO 表名(字段,字段...)VALUES(值,.....)
SELECCT * FROM 表名
UPDATE 表名 SET 字段=值,字段=值.....WHERE 修改条件
DELETE FROM 表名 WHERE 条件