2021年3月26日在Boss直聘和广州XXXX数据公司沟通了一下,想面试那家公司的爬虫实习生,那家公司给了我如下一份面试题。希望半天时间完成。
试题完成结果不太理想。很遗憾》》》》》我的解题思路不太符合贵公司要求
在这里分享出来,主要是与大家讨论一下,集思广益,看看大家完成题目的思路和方法是如何的?
以下是我的解答,有一题未能完成,希望大家帮忙解决。
问题1 :
User-Agent是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA。用较为普通的一点来说:是一种向访问网站提供你所使用的浏览器类型、操作系统及版本、CPU 类型、浏览器渲染引擎、浏览器语言、浏览器插件等信息的标识。请写一段随机ua访问网页的代码
import requests
def CSDN ():
url = "https://blog.csdn.net"
headers ={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'}
response = requests.get(url =url ,headers=headers)
print(response)
res = response.text
print( res)
CSDN()
问题2:写出https://www.conab.gov.br/info-agro/safras/progresso-de-safra 这个页面
所有a标签title属性含有pdf或者xlsx的a标签的xpath规则。
上面图片只获得了每个excel或pdf文档的下载地址,并未将该页面的所有文件下载保存到本地文件夹中,代码有待改进
最初代码如下:
import requests
from lxml import etree
import time
def func():
url = "https://www.conab.gov.br/info-agro/safras/progresso-de-safra"
headers ={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'}
response = requests.get(url =url ,headers=headers)
print(response)
data_txt = response.text
# print(data_txt)
date = etree.HTML(data_txt)
pd_xl = date.xpath('//ul[@class="catItemAttachments"]//li/a')
print(pd_xl)
for px in pd_xl:
time.sleep(1)
px_url = px.xpath('./@href')[0]
Url =' https://www.conab.gov.br'+px_url
name = px.xpath('./@title')[0]
print('文件名为{},链接为{}'.format(name,Url))
if __name__ == '__main__':
func()
问题3:http最常见的两种请求get和post,请分别用requests和aiohttp包写出登录jin10页面拿到首页html的代码。
pass """寻求网友详细帮助"""
问题4:请用递归的形式重写下面函数
def fun(n:int) -> int :
result = 1
while n>0 :
result *= n
n -= 1
return result
我的答案
def fun (n:int)->int:
result = 1
while n>1:
return n*fun(n-1)
else:
return result
print(fun(6)) #假设传入实参6 结果为720
问题5:完善下面这个函数’‘’
def fun(param1: int ,param2:int):
'''param x:int:param1 int:param2
return:返回一个函数,该函数接受一个数字列表, 返回两个列表。
其中第个列表中全是小于param1的数字,第二个列表全是大于param2的数字
'''
我的答案
import random as r
list1 = r.sample(range(10), 10)
print(list1)
min_list =[] #接收全是小于param1的数字
max_list =[] #接收全是大于param2的数字
def fun(param1: int , param2:int ,*args:tuple):
print(args)
for num in args:
for i in num:
if i < param1 :
min_list.append(i)
elif i >param2 :
max_list.append(i)
print(min_list)
print(max_list)
fun (4,6,list1)
#[0, 3, 9, 6, 8, 4, 7, 5, 2, 1]
#[0, 3, 2, 1]
#[9, 8, 7]