爬虫试卷

姓名:_________        分数:_________        总分:100

一、填空题

1. list1 = [x for x in range(5, 2, -1)],则打印list1的结果是_____[5, 4, 3]______(2)

2. Python中的编码格式你用过哪些?___GBK_____,___ASCII_____,____Unicode(utf8)____(2)

3. 数据库大致分为_____关系型数据库______,______非关系型数据库______类型,列举你学过的数据库名称___MySQL____,____Redis____,____Mongodb____,_____sqlite____(4)

4. 字典和列表的区别有哪些?(2)

i字典通过键建立与值得关系,列表通过索引建立和值得关系。

ii字典存储得数据不是按照数据添加得先后顺序存储的,而列表是按照数据添加得先后顺序保存得。

iii字典通过键取值,不支持切片查询;列表通过索引取值,支持切片查询。

5. Scrapy创建项目、创建爬虫、运行爬虫的命令分别为(3)

扫描二维码关注公众号,回复: 2712840 查看本文章

scrapy  startproject  spider

scrapy  genspider  zhihu  zhihu.com

scrapy  crawl  zhihu

6. 列举常用的数据解析方式及解析用到的包(2)

Xpathcssbs4lxml

7. 写一个匿名函数,用于计算两个数的和 

lambda x,y: x+y

二、简答题

1. 通过代码创建一个.xls的文件到本地,并写入多条数据,比如姓名,年龄,身高,体重等。(3)

import xlwt

book = xlwt.Workbook()

sheet = book.add_sheet('stu')

sheet.write(0, 0, '姓名')

sheet.write(0, 1, '年龄')

sheet.write(0, 2, '身高')

sheet.write(0, 3, '体重')

list1 = [('zhangsan','20','180','80'), ('lisi','30','170','60')]

row = 1

for name, age, height, weight in list1:

sheet.write(row, 0, name)

sheet.write(row, 1, age)

sheet.write(row, 2, height)

sheet.write(row, 3, weight)

row += 1

book.save('stu.xls')


2. 类中的关键字selfsuper的区别是什么?(2)

self在类中表示当前类得对象。

Super在类中表示当前类。

 

3. requests模块如何实现cookie的自动化管理,通过代码将主要逻辑实现出来。(3)

From http.cookiejar import LWPCookiejar

Import requests

Session = requests.Session()

Session.cookies = LWPCookieJar(filename=’test.txt’)

Response = session.get()/session.post()

# 保存cookie

Session.cookies.save()

# 加载cookie

Session.cookie.load()

 

4. GET请求和POST请求的区别有哪些?(3)

1> GET请求将参数设置在url中,以?和&得形式拼接;POST请求将参数设置在请求体中;

2> GET请求没有POST请求安全,重要数据容易暴露;

3> GET请求一般用于获取服务器资源;POST请求用于在服务器上创建资源。

 

5. cookiesession的区别是什么?详细描述cookiesession中间的交互过程。(5)

区别:cookie保存在客户端。Session保存在服务器端。

交互过程:

1>用于首次访问网站得时候,服务器会通过Set-Cookie字段向客户端返回一些cookie信息;

2>客户端在接收到服务器响应之后,会解析响应头中得Set-Cookie字段,将数据缓存在本地;

3>客户端再次访问服务器得时候,会在请求头中携带这些cookie信息,用于表明客户端和服务器之间得连接状态;

 

6. 类的继承有哪些优势?面向对象的三大特征是什么?(2)

优势:继承可以实现代码得重用,可以在父类已有功能得基础上,扩展新得功能。

特征:多态、继承、封装。

 

7. 正则表达式中的.*.*?的区别是什么?(2)

.*: 贪婪匹配,在能够匹配正确结果得前提下,尽可能多得匹配字符。

.*?: 非贪婪匹配,在能够匹配正确结果得前提下,尽可能少得匹配字符。

 

8. scrapy是什么?有哪些优势?(2)

Scrapy是一个爬虫框架。

优势:

1>扩展性强,可以自定义管道和中间件;

2>速度快,是一个基于异步多线程得框架;

3>自由控制爬虫得爬取速度,线程数,并发数等控制爬虫爬取过快得方法;

 

9. scrapy自身支持获取动态网站数据吗?如果支持,怎么实现?如果不支持,怎么实现?(2)

自身不支持

需要结合自动化测试框架selenium爬取动态网站。

 

10. 列举网站中常见的反爬虫措施。(2)

User-Agent

Cookie

代理IP

请求头HostReferer

多账号

 

11. 类中的__init__()函数的作用是什么?类中__new__()函数的作用是什么?(2)

__init__()是对一个类得对象进行初始化得操作。

__new__()是创建一个类得对象。

 

12. scrapy各部分之间的数据流向是如何交互的,详细描述一下。(5)

1>引擎将起始url构造成Request交给调度器;

2>调度器对Request对象生成指纹信息,根据是否去重来决定是否将Request放入队列中;

3>引擎从调度器得队列中不断得获取下一个Request请求;

4>引擎将Reques请求交给下载器Downloader进行下载,期间会经过下载器中间件process_request得处理;

5>下载器下载完成以后,经过process_responseResponse对象返回给引擎;

6>引擎将Response对象交给爬虫Spider进行解析,提取数据,期间经过爬虫中间件;

7>爬虫Spider将提取得结果传递给引擎,引擎将item交给管道,将Request对象交给调度器继续调度;

 

 

13. DownoadMiddleware的作用是什么?如何自定义DownloadMiddleware,描述需要实现的函数。(3)

作用:下载器中间件,可以在发起请求之前对Request对象添加必要得信息,比如请求头,Cookie等。

自定义:

需要实现process_request()函数和process_response()函数。

 

14. ItemPipeline的作用是什么?如何自定义ItemPipeline,描述需要实现的函数。(3)

作用:对爬虫解析出来得item对象进行数据得保存。

自定义:process_item()函数。

 

15. ItemLoader获取的数据如何进行数据的提取和过滤的?描述原始数据到最终的结果的数据简要过滤过程。(3)

1>在创建item_loader对象得时候,会执行item对象中input_processoroutput_processor得初始化;

2>在执行add_xpathadd_cssadd_value函数得时候,会将提取得结果交给input_processor进行结果得处理,结果处理完以后暂时保存在item_loader中;

3>等数据提取完毕,调用load_item()方法,执行output_processor将最终结果复制给item对象;

 

 

16. scrapy设置User-Agent的方式有哪几种?简要描述出来。(2)

1>settings.py中通过USER_AGENT进行配置;

2>在下载器中间件中得process_request函数中,通过request.headers.setdefault(b’User-Agent’, ‘’)设置;

3>在自定义得爬虫文件.py中,定义在headers = {‘User-Agent’: ‘ ’}中;

 

17. 描述scrapyurl去重原理。(2)

1>需要将dont_filter设置为False开启去重,默认是True,没有开启去重;

2>对于每一个url得请求,调度器都会根据请求得相关信息加密得到一个指纹信息,并且将指纹信息和set()集合中得指纹信息进行比对,如果set()集合中已经存在这个数据,就不在将这个Request放入队列中。如果set()集合中没有存在这个加密后得数据,就将这个Request对象放入队列中,等待被调度。

 

18. scrapy能实现自定义图片的下载地址和图片名称吗?如果可以,可以通过哪些函数实现?(3)

可以。

get_media_request()file_path()item_complated()

 

 

19. scrapy项目的settings.py文件中:DOWNLOAD_DELAY的作用是什么?ROBOTSTXT_OBEY的作用是什么?(2)

DOWNLOAD_DELAY: 设置请求间隔时间,可以降低爬取速度;

ROBOTSTXT_OBEY用来控制是否遵循robot协议得配置,如果遵守,则网站得一部分内容是无法爬取得。

 

20. scrapy shell的作用是什么?(2)

可以通过scrapy  shell  http://www.baidu.com来连接一个网址,连接完成以后,不会终端,可以在这个命令下对xpath()css()语法进行检测,而不用去频繁得对一个网站发送请求,降低被反爬得可能性。

 

21. Python的虚拟环境是如何进入虚拟环境和查看当前虚拟环境?为什么需要搭建虚拟环境?(2)

Workon

1>搭建虚拟环境主要是为了保证环境得统一性,对于不同得应用建立专属得python环境,比如针对后台开发得django可以建立一个虚拟环境,针对爬虫开发得应用可以建立一个虚拟环境,避免环境之间产生冲突。

2>可以避免一个环境造成得安装包过的多,导致环境加载缓慢。

 

 

22. 常见的css选择器有哪几种(至少列出5)(3)

class选择器

Id选择器

后代选择器

父子选择器

属性选择器

交集选择器

伪类选择器

 

 

23. Mysql数据库和MongoDB数据库的区别是什么?(2)

Mysql是关系型数据库,需要建立多张表,通过需要建立表于表之间得关系。

MongoDB是非关系型数据库,不需要多张表,而是在一张表中通过键值得关系来保存数据。

 

 

24. scrapy中间件中,处理request请求的函数,它的返回值有哪几种情况,分别有什么作用?(3)

Retuen None: 将请求交给后续得中间件进行处理;

Return Request: 将请求交给调度器重新调度,并终止后续中间件得执行;

Return Response: 终止后续中间件及下载器得执行,直接将Response交给引擎。

Return Except: 抛出异常

 

 

25. scrapy中间件中,处理response响应的函数,它的返回值有哪几种情况,分别有什么作用?(3)

Return Request: 终止后续中间件得执行,将请求重新交给调度器进行调度。

Return Response: 继续执行后续得中间件。

Return Except: 抛出异常。

 

26. 正则表达式match()search()函数的区别是什么?(2)

Match()只匹配一个结果,并且只有正确结果在目标字符串得开头位置才能匹配到,如果不在开头位置,无法匹配。

Search()至匹配一个结果,但是正确结果可以在目标字符串得任意位置。

 

 

27. JSON模块中dumps()loads()函数的作用分别是什么?(2)

Dumps: 将一个字典转化为json字符串

Loads: 将一个json字符串转化为字典

 

28. *args**args这两种参数的区别是什么?(2)

*args: 表示元组

**args: 表示字典

 

 

29. smtplib模块发送邮件的基本步骤是什么,用代码将主要逻辑写出来。(2)

创建客户端对象 client = smtplib.SMTP_SSL()

建立连接 client.connect(host, port)

登录授权 client.login(发件人,授权码)

发送邮件 client.sendmail()

 

30. 关键字returnyield的在函数中的作用分别是什么?(2)

return是直接中断函数的执行,并返回一个结果,return之后的代码不会执行。

yield也是返回一个结果,但是yield之后的代码仍然可以执行

 

函数内有return,这个函数是一个普通的有返回值的函数。

函数内有yield,这个函数是一个生成器对象。

 

31. 通过列表生成式,生成这样一个结果列表[1, 9, 25, 49, 81](2)

[x * x  for  x  in  range(1, 11)  if  x%2 !=  0]

 

32. seleniumdriver.switch_to.window()方法和driver.switch_to.frame()方法的区别是什么?(2)

driver.switch_to.window(): 切换窗口,一般是指多个标签选项卡之间的切换,每一个选项卡都是一个window窗口;

driver.switch_to.frame(): 切换html内部框架,一般是在html嵌套的有<iframe>标签时会使用。

 

 

 

33. 三种时间等待的区别:(3)

1>time.sleep(); 2>WebDriverWait(...).until(...); 3>driver.implicitly_wait();

1>强制等待固定的时间;

2>针对某一个元素设置智能等待时间;

3>针对整个页面的加载,设置一个智能等待时间;

34. 列举你所用过的python内置装饰器,至少2个。(2)

@property

@staticmethod

@classmethod

猜你喜欢

转载自blog.csdn.net/qq_42336560/article/details/81041674