1 Linux 的基本命令(怎么区分一个文件还是文件夹)
s -F 在显示名称的时候会在文件夹后添加“/”,在文件后面加“*”。
2 Linux 查看某个服务的端口?
netstat -anp | grep service_name
3 软连接和硬链接的区别?
软连接类似 Windows 的快捷方式,当删除源文件时,那么软链接也失效了。
硬链接可以理解为源文件的一个别名,多个别名所代表的是同一个文件。当 rm 一个文件的时候,那么此文件的硬链接数减1,当硬链接数为 0 的时候,文件被删除。
4 10 个常用的 Linux 命令?
pwd 显示工作路径
ls 查看目录中的文件
cd /home 进入 '/ home' 目录'
cd .. 返回上一级目录
cd ../.. 返回上两级目录
mkdir dir1 创建一个叫做 'dir1' 的目录
rm -f file1 删除一个叫做file1 的文件',-f 参数,忽略不存在的文件,从不给出提示。
rmdir dir1 删除一个叫做 'dir1' 的目录'
groupadd group_name 创建一个新用户组
groupdel group_name 删除一个用户组
tar -cvf archive.tar file1 创建一个非压缩的 tarball
tar -cvf archive.tar file1 file2 dir1 创建一个包含了 'file1', 'file2' 以及 'dir1'的档案文件
tar -tf archive.tar 显示一个包中的内容
tar -xvf archive.tar 释放一个包
tar -xvf archive.tar -C /tmp 将压缩包释放到 /tmp 目录下
tar -cvfj archive.tar.bz2 dir1 创建一个 bzip2 格式的压缩包
tar -xvfj archive.tar.bz2 解压一个 bzip2 格式的压缩包
tar -cvfz archive.tar.gz dir1 创建一个 gzip 格式的压缩包
tar -xvfz archive.tar.gz 解压一个 gzip 格式的压缩包
5 git 合并文件有冲突,如何处理?
1、git merge 冲突了,根据提示找到冲突的文件,解决冲突如果文件有冲突,那么会有类似的标记
2、修改完之后,执行 git add 冲突文件名
3、git commit 注意:没有-m 选项 进去类似于 vim 的操作界面,把 conflict 相关的行删除掉直接 push 就可以了,因为刚刚已经执行过相关 merge 操作了。
6. 写爬虫是用多进程好?还是多线程好? 为什么?
一般情况下,在选择是使用多进程还是多线程时,主要考虑的业务到底是 型(多线程)还是计算密集型(多进程)。
网络并发适宜使用多线程
数据处理业务是一个比较耗时的计算型操作,那么对数据处理部分应当设为多线程
7 一个包里有三个模块,mod1.py , mod2.py , mod3.py ,但使用 from demopack import * 导入模块时,如何保证只有 mod1 、 mod3 被导入了。
答:在包中增加 __init__.py 文件,并在文件中增加:
_all_=['mod1','mod3']
8 需要登录的网页,如何解决同时限制 ip,cookie,session(其中有一些是动态生成的)在不使用动态爬取的情况下?解决限制 IP 可以使用代理 IP 地址池、服务器;不适用动态爬取的情况下可以使用反编译 JS 文件获取相应的文件,或者换用其他平台(比如手机端)看看是否可以获取相应的 json 文件。
9. 验证码的解决?
图形验证码:干扰、杂色不是特别多的图片可以使用开源库 Tesseract 进行识别,太过复杂的需要借助第三方打码平台。
点击和拖动滑块验证码可以借助 selenium、无图形界面浏览器(chromedirver 或者 phantomjs) 和 pillow 包来模拟人的点击和滑动操作,pillow 可以根据色差识别需要滑动的位置。
10 使用最多的数据库(Mysql,Mongodb,redis 等),对他们的理解?
mysql是关系型数据库,支持事物
MongoDB、Redis是非关系型数据库,不支持事物
mongodb、mysql、redis的使用根据如何方便进行选择
希望速度快的时候,选择MongoDB或者是Redis
数据量过大的时候,选择频繁使用的数据存入Redis,其他的存入MongoDB
MongoDB不用提前建表建数据库,使用方便,字段数量不确定的时候使用MongoDB
后续需要用到数据之间的关系,此时考虑使用mysql
11 字符集和字符编码
字符是各种文字和符号的总称,包括各个国家文字、标点符号、图形符号、数字等
字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集有:ASCII 字符集、ISO 8859 字符集、GB2312 字符集、BIG5 字符集、GB18030 字符集、Unicode 字符集等。
字符编码就是以二进制的数字来对应字符集的字符。常见的编码字符集(简称字符集)有:unicode、ASCII、GB2312、GBK、GB13080
注意:Unicode 字符集有多种编码方式,如 UTF-8、UTF-16 等;ASCII 只有一种;大多数 MBCS(包括 GB2312)也只有一种。
12. cookie 过期的处理问题?
因为 cookie 存在过期的现象,一个很好的处理方法就是做一个异常类,如果有异常的话 cookie 抛出异常类在执行程序。
将cookie写入文件,当抛出异常的时候,读取cookie。
13. HTTPS 是如何实现安全传输数据的。
HTTPS 其实就是在 HTTP 跟 TCP 中间加多了一层加密层 TLS/SSL。SSL 是个加密套件,负责对 HTTP的数据进行加密。TLS 是 SSL 的升级版。现在提到 HTTPS,加密套件基本指的是 TLS。原先是应用层将数据直接给到 TCP 进行传输,现在改成应用层将数据给到 TLS/SSL,将数据加密后,再给到 TCP 进行传输。
14. TTL,MSL,RTT?
MSL:报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。
TTL:TTL 是 time to live 的缩写,中文可以译为“生存时间”,由源主机设置初始值,存储了一个 ip 数据报可以经过的最大路由数,每经过一个处理他的路由 器此值就减 1,当此值为 0 则数据报将被丢弃,TTL 与 MSL 是有关系的但不是简单的相等 的关系,MSL 要大于等于 TTL。
RTT: RTT 是客户到服务器往返所花时间(round-trip time,简称 RTT),RTT 受网络传输拥塞程序的变化而变化。
15. requests 返回的 content 和 text 的区别?
a)response.text 返回的是 Unicode 型数据;
a)response.content 返回的是 bytes 类型,也就是二进制数据;
b)获取文本使用,response.text;
b)获取图片,文件,使用 response.content;
c)response.text 类型:str
解码类型: 根据 HTTP 头部对响应的编码作出有根据的推测,推测的文本编码
如何修改编码方式:response.encoding=”gbk”
c)response.content 类型:bytes
解码类型: 没有指定
如何修改编码方式:response.content.decode(“utf8”)
16. robots 协议
Robots 协议:网站通过 Robots 协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。
17. dumps,loads 与 dump,load 的区别?
json.dumps()将 pyhton 的 dict 数据类型编码为 json 字符串;json.loads()将 json 字符串解码为 dict 的数据类型;json.dump(x,y) x 是 json 对象, y 是文件对象,最终是将 json 对象写入到文件中;json.load(y) 从文件对象 y 中读取 json 对象。
18. 怎么获取加密的数据?
1. Web 端加密可尝试移动端(app)
2. 解析加密,看能否破解3. 反爬手段层出不穷,js 加密较多,只能具体问题具体分析分析前端 js 文件,找到加密解密数据的 js 代码,用 Python 代码实现或者利用 js2py 或 pyexecjs等执行 js 代码
19 怎么监控爬虫的状态
1. 使用 python 的 STMP 包将爬虫的状态信心发送到指定的邮箱
2. Scrapyd、pyspider
3. 引入日志集成日志处理平台来进行监控,如 elk