'2019下半年Python高頻面試題目(第三彈)新鮮出爐咯'

"

2019下半年Python高頻面試題目(第三彈)新鮮出爐

一. 如何提高爬取效率?

爬蟲下載慢主要原因是阻塞等待發往網站的請求和網站返回

 1,採用異步與多線程,擴大電腦的cpu利用率;
2,採用消息隊列模式
3,提高帶寬

二. 說說什麼是爬蟲協議?

Robots協議(也稱為爬蟲協議、爬蟲規則、機器人協議等)也就是robots.txt,網站通過robots協議告訴搜索引擎哪些頁面可以抓取,哪些頁面不能抓取。

Robots協議是網站國際互聯網界通行的道德規範,其目的是保護網站數據和敏感信息、確保用戶個人信息和隱私不被侵犯。因其不是命令,故需要搜索引擎自覺遵守。

三. 如果對方網站反爬取,封IP了怎麼辦?

  1. 放慢抓取熟速度,減小對目標網站造成的壓力,但是這樣會減少單位時間內的數據抓取量
  2. 使用代理IP(免費的可能不穩定,收費的可能不划算)
"

2019下半年Python高頻面試題目(第三彈)新鮮出爐

一. 如何提高爬取效率?

爬蟲下載慢主要原因是阻塞等待發往網站的請求和網站返回

 1,採用異步與多線程,擴大電腦的cpu利用率;
2,採用消息隊列模式
3,提高帶寬

二. 說說什麼是爬蟲協議?

Robots協議(也稱為爬蟲協議、爬蟲規則、機器人協議等)也就是robots.txt,網站通過robots協議告訴搜索引擎哪些頁面可以抓取,哪些頁面不能抓取。

Robots協議是網站國際互聯網界通行的道德規範,其目的是保護網站數據和敏感信息、確保用戶個人信息和隱私不被侵犯。因其不是命令,故需要搜索引擎自覺遵守。

三. 如果對方網站反爬取,封IP了怎麼辦?

  1. 放慢抓取熟速度,減小對目標網站造成的壓力,但是這樣會減少單位時間內的數據抓取量
  2. 使用代理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面試題,即將出鍋!夥伴們需要耐心等待一下哈!

"

相關推薦

推薦中...