2019下半年Python高频面试题目(第三弹)新鲜出炉咯

2019下半年Python高频面试题目(第三弹)新鲜出炉

一. 如何提高爬取效率?

爬虫下载慢主要原因是阻塞等待发往网站的请求和网站返回

1,采用异步与多线程,扩大电脑的cpu利用率;
2,采用消息队列模式
3,提高带宽
二. 说说什么是爬虫协议?

Robots协议(也称为爬虫协议、爬虫规则、机器人协议等)也就是robots.txt,网站通过robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。

Robots协议是网站国际互联网界通行的道德规范,其目的是保护网站数据和敏感信息、确保用户个人信息和隐私不被侵犯。因其不是命令,故需要搜索引擎自觉遵守。

三. 如果对方网站反爬取,封IP了怎么办?

放慢抓取熟速度,减小对目标网站造成的压力,但是这样会减少单位时间内的数据抓取量
使用代理IP(免费的可能不稳定,收费的可能不划算)
2019下半年Python高频面试题目(第三弹)新鲜出炉咯

四. 有一个jsonline格式的文件file

def get_lines():
 with open('file.txt','rb') as f:
 return f.readlines()
if __name__ == '__main__':
 for e in get_lines():
 process(e) # 处理每一行数据

现在要处理一个大小为10G的文件,但是内存只有4G,如果在只修改get_lines 函数而其他代码保持不变的情况下,应该如何实现?需要考虑的问题都有那些?

def get_lines():
 with open('file.txt','rb') as f:
 for i in f:
 yield i
Pandaaaa906提供的方法

from mmap import mmap
def get_lines(fp):
 with open(fp,"r+") as f:
 m = mmap(f.fileno(), 0)
 tmp = 0
 for i, char in enumerate(m):
 if char==b"\n":
 yield m[tmp:i+1].decode()
 tmp = i+1
if __name__=="__main__":
 for i in get_lines("fp_some_huge_file"):
 print(i)

要考虑的问题有:内存只有4G无法一次性读入10G文件,需要分批读入分批读入数据要记录每次读入数据的位置。分批每次读取数据的大小,太小会在读取操作花费过多时间。

五. 补充缺失的代码

def print_directory_contents(sPath):
"""
这个函数接收文件夹的名称作为输入参数
返回该文件夹中文件的路径
以及其包含文件夹中文件的路径
"""
import os
for s_child in os.listdir(s_path):
 s_child_path = os.path.join(s_path, s_child)
 if os.path.isdir(s_child_path):
 print_directory_contents(s_child_path)
 else:
 print(s_child_path)

六. 输入日期, 判断这一天是这一年的第几天?

import datetime
def dayofyear():
 year = input("请输入年份: ")
 month = input("请输入月份: ")
 day = input("请输入天: ")
 date1 = datetime.date(year=int(year),month=int(month),day=int(day))
 date2 = datetime.date(year=int(year),month=1,day=1)
 return (date1-date2).days+1

七. 打乱一个排好序的list对象alist?

import random
alist = [1,2,3,4,5]
random.shuffle(alist)
print(alist)

八. 现有字典 d= {‘a’:24,‘g’:52,‘i’:12,‘k’:33}请按value值进行排序?

sorted(d.items(),key=lambda x:x[1])

九. 字典推导式

d = {key:value for (key,value) in iterable}

十. 请反转字符串 “aStr”?

print("aStr"[::-1])

热气腾腾的黄金Python面试题,即将出锅!伙伴们需要耐心等待一下哈!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值