python爬虫面试题

1,python 常用数据结构有哪些?请简要介绍一下。

答:列表,元组,字典,集合等

    列表:有序集合,可随时改变元素

   元组:有序集合,一旦初始化,不可变

   字典:无序集合,以key-value形式存储,key可为元组,字符串,整数等,不可重复,可随时更改

   集合:无序集合,key储存,可随时增删查改

2,简要描述 Python 中单引号、双引号、三引号的区别。

答:单引号和双引号的用法是一样的,但如果字符串中要有相同的字符,要用转义符进行转义,三引号是“所见即所得”,原格式输出。

3,如何在一个 function 里面设置一个全局的变量?

答:用global进行设置全局变量

4,Python 里面如何拷贝一个对象?(赋值、浅拷贝、深拷贝的区别)

答:赋值(=),把一个变量赋给另一个变量,一个变量改变,另一个也随之改变

     所谓“浅拷贝”,是指创建一个新的对象,其内容是原对象中元素的引用。(拷贝组合对象,不拷贝子对象)

     常见的浅拷贝有:切片操作、工厂函数、对象的copy()方法、copy模块中的copy函数。

    所谓“深拷贝”,是指创建一个新的对象,然后递归的拷贝原对象所包含的子对象。深拷贝出来的对象与原对象没有任何关联。

     深拷贝只有一种方式:copy模块中的deepcopy函数。

5,如果 custname 字符串的内容为 utf-8 的字符,如何将 custname 的内容转为 gb18030 的字符串?

答:“custname ”.decode('utf-8).encoding('gb18030)

6,请写出一段 Python 代码实现删除一个 list 里面的重复元素。

答:alist = list(set([1,2,3,3,4,4]))

7,这两个参数是什么意思:args,*kwargs?

答:是可变参数,如果我们不确定要往函数中传入多少个参数,或者我们要想以列表或者元组的形式传参,那就用*args,

     如果我们不知道要往函数中传多少个关键字参数,或者要传入字典的值作为关键字参数,那就要使用*kwargs

8,统计如下 list 单词及其出现次数。

a=['apple', 'banana', 'apple', 'tomato', 'orange', 'apple', 'banana', 'watermeton']

给列表中的字典排序:假设有如下 list 对象
alist=[{"name":"a", "age":20}, {"name":"b", "age":30}, {"name":"c", "age":25}]

将 alist 中的元素按照 age 从大到小排序。

9,假设有如下两个 list:a = ['a', 'b', 'c', 'd', 'e'],b = [1, 2, 3, 4, 5],将 a 中的元素作为 key,b 中元素作为 value,将 a,b 合并为字典。

答:dict_a = dict(zip(a,b))

10,http的报文组成结构?

答:请求报文:请求行,请求头,空行,请求数据

       响应报文:响应行,响应头,空行,响应数据

11,解释下Http请求头和常见的响应状态码

答: cookie:这个头信息把之前发送到浏览器的 cookies 返回到服务器。

        host: 这个头信息指定原始的 URL 中的主机和端口。

        refer: 这个头信息指示所指向的 Web 页的 URL。例如,如果您在网页 1,点击一个链接到网页 2,当浏览器请求网页 2 时,网页 1 的 URL 就会包含在 Referer 头信息中。

        User-Agent:这个头信息识别发出请求的浏览器或其他客户端,并可以向不同类型的浏览器返回不同的内容。

        200:客户端请求成功;

        400:客户端请求有语法错误,不被服务器理解;

        403: 服务器收到请求,但是拒绝提供服务;

        404 Not Found:请求资源不存在,eg:输入了错误的url;

        500:服务器发生了不可预估的错误;

        503:服务器当前不能处理客户端的请求,一段时间和恢复正常

12,http和https协议有什么区别?

       http是超文本传输协议,被用于在web浏览器和服务器之间传递信息。http协议工作是以明文的方式发送内容,不提供任何形式的数据加密。而这也是很容易被黑客利用的地方。所以http协议不适合用于传输一些重要,敏感的信息。

      https协议,是安全套接字层协议,是为了弥补http协议的缺点而出生的,https在http的基础上加了ssl协议,ssl依靠证书来验证服务器的身份,为浏览器和服务器之间的通信加密。

      https协议需要用到ca证书,一般免费的很少,需要费用,而http协议则不用。

      https协议是超文本传输协议,是明文传输信息,而https协议则是具有安全性的ssl加密传输协议。

      http协议传输使用的端口是80,而https协议传输的端口是443

      http协议的链接是很简单的,无状态的,https协议是由SSL+HTTP协议构成的加密传输协议、身份认证的网络协议 比HTTP协议安全

13,HTTP协议的特点有哪些?

答:1.支持C/S模式即客户端/服务器模式,2.简单快捷 3.灵活

14,如何提高爬虫的效率?

答:1.爬取方面,使用异步io; 2.处理方面,利用消息队列,做生产者消费者模型; 3,多进程、多线程;4,分布式; 5,提高网速

15,请简述一下scrapy的工作流程?

答:1,首先Spider将要发送请求的url经过ScrapyEngine(引擎)交给Scheduler(调度器)

       2,调度器处理后,经过引擎和下载器中间件(可选)交给下载器(Downloader)

       3,下载器向互联网发请求,并接受下载响应(response)。将响应经过引擎或爬虫中间件(可选)交给Spider

       4,Spider处理response,提取数据并将数据经过引擎交给ItemPipline保存(可以是本地,也可以说数据库)

       5,提取url重新经过引擎交给调度器进行下一个循环。知道没有url进行请求时程序停止。

16,多进程和多线程的区别?

答:1,线程是共享内存空间,进程的内存是独立的。

       2,同一个进程之间的线程可以互相直接交流;两个进程之间想通信,必须通过一个中间代理来实现。

      3,创建新线程简单,但创建新进程需要对其父进程进行一次克隆。

      4.一个线程可以操作和控制同一进程里的其他线程;但是进程只能操作子进程。

      5,改变主线程可能会影响其他线程,改变父进程,不影响子进程。

17,爬虫爬取的内容怎样进行去重?

      1,利用数据库,根据特定的字段去重。

      2,根据数据或url进行去重。

      3,根据scrapy自带的去重机制去重。

      4,还可以使用md5加密后在比较。

      5,可以使用布隆过滤去重

18,用正则怎样匹配手机号?

答:“(1[3,4,5,7,8]\d{9})”

19,有一个文本,以#或@对其进行分割。例如“123#456@abccccc@d”,分割结果为[“123”, “456”, “abccccc”, “d”]

答:  import re

     string = “123#456@abccccc@d”

     pat = re.compile(r'#|@', re.S)

    result = pat.spilt(string)

     print(result)

20,写一个正则,匹配文本(a+b)*(a1-b1)/2中所有变量(a, b, a1, b1)

import  re

string = (a+b)*(a1-b1)/2

pattern = re.compile(r'[a-z]+\d*')

pattern = re.compile(r'[a-zA-Z] + \d*')

data = re.findall(pattern, string)

print(data)

21,在re模块中,match() 和 search()  的区别?

答: match() 只检查第一个匹配的字符,search()扫描整个字符串

22,session和cookie的联系与区别;

答:在储存位置上:session储存在服务器端,cookie储存在客户端

       在目的上:cookie是跟踪会话,也可以保存用户偏好设置或者用户名和密码;session也是跟踪会话

       在安全性上:cookie不安全; session 比较安全

23,什么是robot协议?

答:robot协议(爬虫协议,爬虫规则,机器人协议等)也就是robot.txt,网站通过robot协议告诉搜索引擎,哪些页面可以抓取,哪些数据不能抓取。robot协议是网站国际互联网通行的道德规范,确保用户个人的隐私不被侵犯,因其不是命令,所以需要搜索引擎自觉遵守。

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值