python基础常识
1. if __name__=='__main__'
__name__表示当前模块名,当模块被运行是模块名为__main__,也是当前模块,当模块被导入是,模块名就不是__main__,即当前代码不会被运行
2.python内存管理机制
a.引用计数机制
b.垃圾回收机制
c.内存池机制
重新赋值,即会触发垃圾回收机制
内存满了的情况下会触发
3.删除一个列表的重复元素(三种方法)
4.浅拷贝与深拷贝
浅拷贝只拷贝对象本身, 对象(如 list, dict)中的子元素不会被拷贝,而是依旧引用原对象。深拷贝会将对象即其中的包含的子元素全部拷贝一份。
5.except的用法以及作用
try.....except....else
except区域是用来捕获所有异常的
6.__new__与__init__的区别
__init__创建对象后调用,对当前对象实例化,没有返回值
__new__创建对象时调用,返回当前对象的实例,可以用__new__实现单例
7.常用的网络爬虫方法
正则,lxml,beautiful soup
8.遇到过的反爬虫机制及相应的反反爬虫措施
a:
通过header反爬虫
基于用户行为限制(在一个时间段内访问次数过多)
动态网页的加载,(js,ajax)
数据的加密
b:
自定义添加header数据,(user_Agent,cookie等)
使用代理池ip去轮番请求
对动态网页的使用selenium + phantomjs去抓取
可以使用selenium截屏,并使用自带的pytesseract的库区识别,或者直接查找源代码,了解加密方式去解密
9.urllib与urllib2的区别
urllib与urllib2都是接受url请求的相关模块,但是urllib2可以接受request实例
10.网络爬虫所用到的网络数据包,解析包
网络数据包:urllib、urllib2、requests
解析包:re,lxml,beautiful soup,xpath
11.django与flask的区别
Flask:
1.flask自由,灵活,可扩展性强,第三方库的选择广,开发可以使用自己喜欢的轮子,也能结含最流行的以及强大的python库
2.入门简单,及没有web开发经验,也能很快做出网站
3.非常适用与小型网站
4.非常适用于web服务的API
5.开发大网站无压力,但架构需自己设计,开发成本取决于开发者的能力
6.fkask与关系库数据库的配合适用不弱于django,而与nosql数据库的配合远远优于django
7.flask比django更加pythonic,与python的philosophy更加吻合
django:
1.django是一款重量级的web开发框架,自带的ORM和模板引擎,灵活与自由度不够
2.不适合开发小型网站,毕竟功能太强大了
3.django自带的ORM非常优秀,综合评价略高于SALAlchemy
12.Linux部署服务脚本命令
13.你用过多线程和异步嘛?除此之外你还用过什么方法来提高爬虫效率?
使用scrapy-redis分布式爬取
对于定向爬取可以用re代替xpath
14.post与get的区别
1.get重点在于向服务器请求数据,而post在于向服务器发送数据
2.get通过url传输数据,以字段=值的形式置于url后端,post通过http post机制将字段=值封存请求实体中,发送给服务器。
3.get传输可见,post传输不可见,所以post传输安全
4.get传输量小,但效率高,post传输量大,效率慢
15.什么是lambda函数,有什么好处