• 192.49 KB
  • 2021-05-18 发布

《网路爬虫与信息提取》复习资料

  • 199页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档由用户上传,淘文库整理发布,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,请立即联系网站客服。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细阅读内容确认后进行付费下载。
  4. 网站客服QQ:403074932
‎ 《网络爬虫与信息提取》课程期末复习资料 ‎《网络爬虫与信息提取》课程讲稿章节目录:‎ 第1章 网络爬虫概念 ‎(1)掌握网络爬虫定义;‎ ‎(2)了解网络爬虫的用途;‎ ‎(3)了解网络爬虫与信息提取的开发技术;‎ 第2章 Python基础 ‎(1)掌握Python开发环境的搭建;‎ ‎(2)掌握Python的基本知识、数据类型;‎ ‎(3)掌握Python的条件语句和循环语句;‎ ‎(4)掌握Python函数的定义和使用;‎ ‎(5)掌握基于Python的面向对象编程代码;‎ 第3章 正则表达式与文件操作 ‎(1)掌握正则表达式的基本符号;‎ ‎(2)掌握正则表达式的使用;‎ ‎(3)掌握正则表达式的提取技巧;‎ ‎(4)掌握文件操作;‎ 第4章简单的网页爬虫方法 ‎(1)掌握requests的安装和使用; ‎ ‎(2)掌握多线程爬虫的开发;‎ ‎(3)掌握爬虫的常见算法。‎ 第5章 信息提取高级方法 ‎(1)掌握HTML基础结构;‎ ‎(2)掌握XPath提取方法;‎ ‎(3)掌握Beautiful Soup4提取方法;‎ 第6章Python与数据库 ‎(1)掌握MongoDB的使用;‎ ‎(2)掌握Redis的使用;‎ ‎(3)掌握数据库优化;‎ 第7章 异步加载与请求头 ‎(1)掌握异步加载;‎ ‎(2)掌握请求头;‎ ‎(3)掌握模拟浏览器;‎ 第8章 模拟登录与验证码 ‎(1)掌握模拟登录;‎ ‎(2)掌握填充验证码;‎ 第9章 抓包与中间人爬虫 ‎(1)掌握使用Charles抓取数据包;‎ ‎(2)掌握App爬虫和小程序爬虫;‎ ‎(3)掌握使用mitmproxy开发中间人爬虫;‎ 第10章 Android原生App爬虫 ‎(1)掌握Android测试环境的搭建;‎ ‎(2)掌握使用Python操纵手机;‎ ‎(3)掌握单设备应用;‎ ‎(4)掌握多设备应用(群控)。‎ 第11章 Scrapy框架 ‎(1)掌握搭建Scrapy环境;‎ ‎(2)掌握Scrapy的使用;‎ ‎(3)掌握Scrapy与MongoDB;‎ ‎(4)掌握Scrapy与Redis;‎ ‎(5)掌握公务员免职。‎ 第12章 Scrapy高级应用 ‎(1)掌握搭建Scrapy环境;‎ ‎(2)掌握Scrapy的使用;‎ ‎(3)掌握Scrapy与MongoDB;‎ ‎(4)掌握Scrapy与Redis;‎ ‎(5)掌握公务员免职。‎ 第13章 爬虫开发中的法律和道德问题 ‎(1)了解数据采集的法律问题和规避措施;‎ ‎(2)了解数据采集的道德协议;‎ 一、客观部分:(单项选择、多项选择、不定项选择、判断)‎ ‎(一)、判断部分 ‎1、通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询。‎ 答案: 正确 ‎★难度:易 参见章节:第1章 考核知识点:网络爬虫概念 试题解析:‎ ‎2、通用搜索引擎的目标是尽可能大的网络覆盖率,搜索引擎服务器资源与网络数据资源互相匹配 答案: 错误 ‎★难度:中 参见章节:第1章 考核知识点:网络爬虫概念 试题解析:通用搜索引擎的目标是尽可能大的网络覆盖率,有限的搜索引擎服务器资源与无限的网络数据资源之间的矛盾将进一步加深。‎ ‎3、通用网络爬虫通常采用串行工作方式 答案: 错误 ‎★难度:中 参见章节:第1章 考核知识点:网络爬虫概念 试题解析:并行方式 ‎4、Python中直接对浮点数进行计算有print(0.1+0.2),则结果为0.3‎ 答案: 错误 ‎★难度:中 参见章节:第2章 考核知识点:Python基础 试题解析:>>> print(0.1 + 0.2)‎ ‎0.30000000000000004‎ ‎5、Python中列表生成以后还可以往里面继续添加数据,也可以从里面删除数据;‎ 答案: 正确 ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎6、Python中元组生成以后还可以往里面继续添加数据,也可以从里面删除数据;‎ 答案: 错误 ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:元组一旦生成就不能修改。‎ ‎7、如果元组里面只有整数、浮点数、字符串、一个列表,就既不能添加数据,也不能删除数据,还不能修改里面数据的值。‎ 答案: 错误 ‎★难度:中 参见章节:第2章 考核知识点:Python基础 试题解析:但是如果元组里面包含了一个列表,那么这个元组里面的列表依旧可以变化。‎ ‎8、Python中字符串切片以后的结果还是字符串 答案: 正确 ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎9、Python中条件语句在使用and连接的多个表达式中,只要有一个表达式不为真,那么后面的表达式就不会执行。‎ 答案: 正确 ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎10、Python中条件语句在使用or连接的多个表达式中,只要有一个表达式为真,那么后面的表达式就不会执行。‎ 答案: 正确 ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎11、Python中函数返回值的个数可以是多个 答案: 正确 ‎★难度:难 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎12、Python中相比于findall方法,search方法对于从超级大的文本里面只找第1个数据特别有用,可以大大提高程序的运行效率。‎ 答案: 正确 ‎★难度:易 参见章节:第3章 考核知识点:正则表达式与文件操作 试题解析:‎ ‎13、Python中使用下面代码打开文件也需要对文件进行close关闭操作 with open('文件路径', '文件操作方式', encoding='utf-8') as f 答案: 错误 ‎★难度:易 参见章节:第3章 考核知识点:正则表达式与文件操作 试题解析:不需要 ‎14、Python中写CSV文件的writerows方法参数为字典类型 答案: 错误 ‎★难度:难 参见章节:第3章 考核知识点:正则表达式与文件操作 试题解析:包含字典的列表 ‎15、Python中写CSV文件的writerow方法参数为包含字典的列表类型 答案: 错误 ‎★难度:难 参见章节:第3章 考核知识点:正则表达式与文件操作 试题解析:字典 ‎16、Python正则表达式中“.*”是贪婪模式,获取最长的满足条件的字符串。‎ 答案: 正确 ‎★难度:中 参见章节:第3章 考核知识点:正则表达式与文件操作 试题解析:‎ ‎17、Python正则表达式中“.*?”是非贪婪模式,获取最短的能满足条件的字符串。‎ 答案: 正确 ‎★难度:中 参见章节:第3章 考核知识点:正则表达式与文件操作 试题解析:‎ ‎18、一般来说在页面都通过GET将用户登录信息传递到服务器端。‎ 答案: 错误 ‎★难度:易 参见章节:第4章 考核知识点:简单的网页爬虫方法 试题解析:POST ‎19、requests中get请求方法的使用为requests.get('网址', data=data)‎ 答案: 错误 ‎★难度:易 参见章节:第4章 考核知识点:简单的网页爬虫方法 试题解析:requests.post('网址', data=data).get无参数 ‎20、requests中post请求方法的使用为requests.post('网址', data=data)‎ 答案: 正确 ‎★难度:易 参见章节:第4章 考核知识点:简单的网页爬虫方法 试题解析:‎ ‎21、multiprocessing本身是Python的多线程库 答案: 错误 ‎★难度:难 参见章节:第4章 考核知识点:简单的网页爬虫方法 试题解析:多进程库 ‎22、在使用多线程处理问题时,线程池设置越大越好 答案: 错误 ‎★难度:中 参见章节:第4章 考核知识点:简单的网页爬虫方法 试题解析:如果线程池设置得过大,线程切换导致的开销可能会抵消多线程带来的性能提升 ‎23、在对XPath返回的对象再次执行XPath的时候,子XPath开头需要添加斜线 答案: 错误 ‎★难度:中 参见章节:第5章 考核知识点:信息提取高级方法 试题解析:在对XPath返回的对象再次执行XPath的时候,子XPath开头不需要添加斜线 ‎24、RoboMongo是MongoDB的管理软件 答案: 正确 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎25、Robo 3T与RoboMongo是完全不一样的软件 答案: 错误 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:Robo 3T与RoboMongo除了名字不一样以外,其他地方都是一样的。‎ ‎26、MongoDB 是一个基于分布式文件存储的数据库 答案: 正确 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎27、MongoDB是一个关系数据库产品 答案: 错误 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。‎ ‎28、运行MongoDB以后,不会在终端打印任何Log 答案: 错误 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:需要看配置文件 ‎29、数据在MongoDB中是按照“库(Database)”—“集合(Collections)”—“文档(Document)”的层级关系来存储的。‎ 答案: 正确 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎30、PyMongo模块是Python对MongoDB操作的接口包,能够实现对MongoDB的增删改查及排序等操作。‎ 答案: 正确 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎31、MongoDB URI的格式为:‎ mongodb://服务器IP或域名:端口@用户名:密码 答案: 错误 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:MongoDB URI的格式为:‎ mongodb://用户名:密码@服务器IP或域名:端口 ‎32、默认情况下,MongoDB可以通过外网访问 答案: 错误 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:默认情况下,MongoDB只允许本机访问数据库 ‎33、插入数据时,MongoDB会自动添加一列“_id”,也就是自增ID,每次自动加1‎ 答案: 错误 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:通过一定的算法计算出来的 ‎34、MongoDB中ObjectId可以反向恢复为时间 答案: 正确 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎35、MongoDB支持对查询到的结果进行排序。排序的方法为sort()。它的格式为:‎ handler.find().sort('列名', 1或-1或0)‎ 答案: 错误 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:MongoDB支持对查询到的结果进行排序。排序的方法为sort()。它的格式为:‎ handler.find().sort('列名', 1或-1)‎ ‎36、PyMongoDB中排序方法sort第二个参数1表示降序 答案: 错误 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:1表示升序 ‎37、PyMongoDB中排序方法sort第二个参数-1表示升序 答案: 错误 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:-1表示降序 ‎38、MongoDB是一个基于内存的数据库,速度远快过Redis 答案: 错误 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎39、在MacOS下若要运行Redis可以运行解压以后的文件夹下面的src文件夹中的redis-server文件启动redis服务 src/redis-server 答案: 错误 ‎★难度:难 参见章节:第6章 考核知识点:Python与数据库 试题解析:Ubuntu下的运行方法 ‎40、在Windows中下若要运行Redis可以运行redis-server /usr/local/etc/redis.conf 答案: 错误 ‎★难度:难 参见章节:第6章 考核知识点:Python与数据库 试题解析:MacOs下运行方法 ‎41、在Ubuntu下若要运行Redis可以使用CMD进入解压以后的文件夹并运行命令redis-server.exe redis.windows.conf启动Redis 答案: 错误 ‎★难度:难 参见章节:第6章 考核知识点:Python与数据库 试题解析:Windows下运行方法 ‎42、Redis的列表是一个单向队列 答案: 错误 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:Redis的列表是一个可读可写的双向队列 ‎43、Redis插入数据都是插入到列表右侧,因此读取数据也是从右侧读取 答案: 错误 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:Redis的列表是一个可读可写的双向队列,可以把数据从左侧或者右侧插入到列表中,也可以从左侧或者右侧读出数据 ‎44、Redis中写数据命令lpush中l代表list 答案: 错误 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:代表left ‎45、Redis中查询列表长度命令llen中l代表left,即从左侧开始数 答案: 错误 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:代表list ‎46、Redis中列表读取数据命令lrange中l代表left,即从左侧开始读取 答案: 错误 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:代表list ‎47、Redis的集合与Python的集合一样,没有顺序,值不重复 答案: 正确 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎48、Redis中使用lrange读取数据后数据也会删除 答案: 错误 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:不删除 ‎49、虽然MongoDB相比于MySQL来说,速度快了很多,但是频繁读写MongoDB还是会严重拖慢程序的执行速度。‎ 答案: 正确 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎50、为了保证数据插入效率,在内存允许的情况下,应该一次性把数据读入内存,尽量减少对MongoDB的读取操作。‎ 答案: 正确 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎51、MongoDB在频繁读写方面优于Redis 答案: 错误 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:Redis优 ‎52、所有的异步加载都会向后台发送请求 答案: 错误 ‎★难度:中 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:不一定 ‎53、Cookies一般包含在请求头Headers中 答案: 正确 ‎★难度:易 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎54、Python可以将列表或字典转换成Json字符串 答案: 正确 ‎★难度:易 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎55、使用AJAX技术,可以在不刷新网页的情况下更新网页数据 答案: 正确 ‎★难度:易 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎56、使用异步加载技术的网站,被加载的内容可以在源代码中找到 答案: 错误 ‎★难度:中 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:找不到 ‎57、在请求头中设置User-Agent即可正常请求网站 答案: 错误 ‎★难度:难 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:还需要其他信息 ‎58、异步加载的内容一般在网页框架加载完成之前 答案: 错误 ‎★难度:易 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:不一定 ‎59、Python中包含字典的列表页可以转换成JSON字符串 答案: 正确 ‎★难度:中 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎60、HTTP只能通过POST请求才能发送数据 答案: 错误 ‎★难度:易 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:GET等 ‎61、Selenium必须加载对应的webdriver才能模拟浏览器访问 答案: 正确 ‎★难度:中 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎62、在发送请求时需要注意requests提交的请求头不能与浏览器的请求头一致,因为这样才能隐藏好自己达到获取数据的目的 答案: 错误 ‎★难度:难 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:需要保持一致 ‎63、HTTP状态码中303状态码明确表示客户端应当采用POST方法获取资源 答案: 错误 ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:GET ‎64、爬虫登录需要识别验证码可以先把程序关闭,肉眼识别以后再重新运行 答案: 错误 ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎65、HTTP状态码302表示资源永久重定向。‎ 答案: 错误 ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎66、HTTP状态码403表示资源禁止访问。‎ 答案: 正确 ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎67、HTTP状态码503表示服务器内部故障。‎ 答案: 错误 ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎68、验证码必须通过手动填充识别。‎ 答案: 错误 ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎69、开源库pytesseract的作用是将图像中文字转换为文本。‎ 答案: 正确 ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎70、cookies在http请求中是明文传输的。‎ 答案: 正确 ‎★难度:中 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:http是明文传输,加密需要用https ‎71、HTTP状态码302与307完全同义。‎ 答案: 正确 ‎★难度:中 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎72、需要实名认证的打码网站更加安全可靠。‎ 答案: 错误 ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:拒绝实名制,防止泄露个人信息。‎ ‎73、打码平台都是靠机器使用OCR技术识别图片上的文字。‎ 答案: 错误 ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:主要靠人工识别 ‎74、需要登录的网站一般通过GET请求就可以实现登录。‎ 答案: 错误 ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:登录表单一般需要发送post请求 ‎75、对Charles设置代理时,Ip可以设置为127.0.0.1,端口为8888.‎ 答案: 正确 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎76、当Charles抓包以后,在Mac OS系统下可以按Command+F组合键,在Windows系统下按Ctrl+F组合键打开Charles进行搜索 答案: 正确 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎77、在charles中使用CTRL+F搜索,JSON里面的中文是可以直接搜索到的。‎ 答案: 错误 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎78、使用Charles直接抓取HTTPS的数据包,就会出现大量的Method为CONNECT的请求,但是这些请求又全部都会失败,是没有安装SSL证书导致的 答案: 正确 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎79、使用Charles,可以轻松截获手机App和微信小程序的数据包,从而开发出直接抓取App后台和小程序后台的爬虫。‎ 答案: 正确 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎80、微信小程序的反爬虫能力要比网页的高很多。‎ 答案: 错误 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎81、中间人爬虫就是利用了中间人攻击的原理来实现数据抓取的一种爬虫技术 答案: 正确 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎82、中间人攻击也是抓包的一种。‎ 答案: 错误 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎83、安装mitmdump之前,运行sudo apt-get install python3-dev python3-pip libffi-dev libssl-dev是为了安装必要的运行环境。‎ 答案: 正确 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎84、网站返回的Headers中经常有Cookies,可以用mitmdump脚本使用print函数把Cookies打印出来。‎ 答案: 错误 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎85、Charles能截获HTTP和HTTPS的数据包,如果网站使用websocket就可以截获。‎ 答案: 错误 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎86、在中间人攻击中,攻击者可以拦截通信双方的通话,并插入新的内容或者修改原有内容 答案: 正确 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎87、上课传纸条中,传递纸条的人就可以发起中间人攻击。‎ 答案: 正确 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎88、操作文本难以实现自动化,而操作图形界面可以容易的实现自动化。‎ 答案: 错误 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎89、mitmproxy的强大之处在于它还自带一个mitmdump命令。这个命令可以用来运行符合一定规则的Python脚本 答案: 正确 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎90、Charles是一个收费软件,如果没有注册,安装以后的前30天可以正常使用。30天以后,虽然功能不会缩水,但每过30分钟Charles会自动关闭一次 答案: 正确 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎91、Charles和Chrome开发者工具相比,只是多了一个搜索功能。‎ 答案: 错误 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎92、charles配置中,安装完成证书以后,在设置中打开“关于本机”,找到最下面的“证书信任设置”,并在里面启动对Charles证书的完全信任。‎ 答案: 正确 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎93、要实现Charles对Android抓包,其过程比iOS稍微复杂一点。这是因为不同的Andorid设备,安装证书的入口可能不一样 答案: 正确 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎94、当使用Charles监控iOS设备或者Android设备的数据包以后,打开微信小程序,小程序的数据包不能自动被Charles抓住,需要另作处理。‎ 答案: 错误 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎95、数据抓包就是中间人爬虫的一个简单应用。所以使用Charles也是一种中间人攻击 答案: 正确 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎96、为了在安卓手机上安装证书,需要先发送证书到手机里面。在Charles中选择“Help”-“SSL Proxying”-“Save Charles Root Certificate”命令,可以将Charles的证书保存到计算机桌面。‎ 答案: 正确 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎97、如果把网络上发送与接收的数据包理解为快递包裹,那么在快递运输的过程中取出查看更改里面的内容,就是类似抓包的过程 答案: 错误 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:抓包不会改变数据 ‎98、chrome开发者工具没法对数据进行搜索。如果想知道一个特定的异步加载内容来自哪个请求,必须在“Network”选项卡里面一个请求一个请求地进行查看.‎ 答案: 正确 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎99、上课传纸条。A要把纸条传给B,但是A与B距离太远,于是让C来转交纸条。此时,C先篡改纸条的内容再传给B,这是一种类似抓包的方式。‎ 答案: 错误 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎100、UI Automator Viewer与Python uiautomator可以同时使用 答案: 错误 ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:UI Automator Viewer与Python uiautomator不能同时使用 ‎101、使用UI Automator使屏幕向上滚动一屏的操作是得到相应控件后使用命令scroll.vert.forward()‎ 答案: 错误 ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:backward()‎ ‎102、使用UI Automatorr让屏幕向右滚动的操作是得到相应控件后使用命令scroll.horiz.forward()‎ 答案: 错误 ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:backward()‎ ‎103、device.sleep()方法是使用UI Automatorr关闭屏幕的命令 答案: 正确 ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎104、使用UI Automatorr操作实体键的命令为device.press.实体按键名称()‎ 答案: 正确 ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎105、在安装Scarpy的依赖库时,由于Visual C++ Build Tools的安装速度很慢,为了节省时间,可以和安装Twisted同时进行 答案: 错误 ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎106、在Linux的终端使用apt-get命令安装一系列依赖库时,其中如果存在有已经安装的库,会覆盖掉之前的库重新安装 答案: 错误 ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎107、Linux环境中,Virtualenv创建的虚拟Python环境中,执行pip命令安装第三方库就不需要使用sudo命令了。‎ 答案: 正确 ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎108、Scrapy的工程名字不能使用"scrapy",否则爬虫会无法运行。除此以外工程名不受限制。‎ 答案: 错误 ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:工程名可以使用英文字母和数字的组合,但是绝对不能使用“scrapy”(小写)作为工程名,否则爬虫无法运行。也不要使用任何已经安装的Python第三方库的名称作为工程名,否则可能会出现奇怪的错误。‎ ‎109、当使用Scarpy创建爬虫时,当爬取网易云音乐首页信息时,scrapy genspider的第二个参数直接输入"163.com"就可以了 答案: 错误 ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:如果有一些网址需要添加二级域名才能访问,那么这里也必须要把二级域名加上。‎ ‎110、已经创建好的Scrapy爬虫*.py文件可以直接通过Python来运行 答案: 错误 ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:Scrapy的爬虫绝对不能通过Python直接运行example.py来运行。‎ ‎111、当运行爬虫代码后,出现"Forbidden by robots.txt"提示后,说明当前时间段被爬取的网站无法访问。‎ 答案: 错误 ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎112、爬虫文件无法从Pycharm运行和调试,只能通过命令行的方式运行。‎ 答案: 错误 ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:可以通过创建另一个Python文件的方式来通过pycharm运行 ‎113、在有spiders何setting.py这两项的情况下,可以写出爬虫并且保存数据,items.py和pipelines.py文件是原作者的失误而导致的冗余文件。‎ 答案: 错误 ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎114、如果MongoDB运行在所在的计算机上,MONGODB_HOST应该写成"192.168.0.1"‎ 答案: 错误 ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:127.0.0.1本地IP地址 ‎115、Scrapy作为一个爬虫的框架,它在单机环境下运行时就可以获得最大性能优势 答案: 错误 ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎116、XPath提取出来的内容是一个SelectorList对象,它的第0个元素就是网页的源代码。‎ 答案: 错误 ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎117、Scrapy每一次发起请求之前都会在这里检查网址是否重复。因此如果确实需要再一次爬取数据,在Redis中把这个Key删除即可。‎ 答案: 正确 ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎118、引用中间件时后面的数字代表的是中间件的执行顺序,例如 'AdvanceSpider.middlewares.ProxyMiddleware': 543 中的543‎ 答案: 正确 ‎★难度:易 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎119、数字越大的中间件越先被执行 答案: 错误 ‎★难度:易 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎120、爬虫中间件的作用对象是请求request和返回response 答案: 错误 ‎★难度:易 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎121、爬虫中间件的激活需要另外写一个文件来进行 答案: 错误 ‎★难度:易 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎122、下载器中间件里面的报错一般是由于外部原因引起的 答案: 正确 ‎★难度:易 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎123、middlewares.py是下载器中间件 答案: 错误 ‎★难度:易 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎124、代理中间件的可用代理列表一定要写在settings.py里面 答案: 错误 ‎★难度:易 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎125、把cookies这段文本放在Redis里面,可以使scrapy请求网页时始终保持登录状态 答案: 正确 ‎★难度:易 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎126、设置了这个中间件以后,仍然需要输入账号密码可以成功得到登录以后才能看到的HTML 答案: 错误 ‎★难度:易 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎127、scrapy与selenium结合可以实现直接处理需要异步加载的页面 答案: 正确 ‎★难度:易 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎128、process_spider_output(response, result, output)是在下载器中间件处理完成后,马上要进入某个回调函数parse_xxx()前调用 答案: 错误 ‎★难度:中 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎129、process_spider_input(response, spider)是在爬虫运行yield item或者yield scrapy.Request()的时候调用 答案: 错误 ‎★难度:中 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎130、使用Scrapyd,可以实现一键部署Scrapy爬虫,访问一个网址就启动/停止爬虫 答案: 正确 ‎★难度:易 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎131、Scrapyd可以同时管理多个Scrapy工程里面的多个爬虫的多个版本 答案: 正确 ‎★难度:易 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎132、在默认情况下,Scrapyd可以从外网访问 答案: 错误 ‎★难度:易 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎133、”curl http://爬虫服务器IP地址:6800/cancel.json -d project=工程名 -d job=爬虫JOBID“该命令的作用是启动爬虫 答案: 错误 ‎★难度:易 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎134、使用Nginx反向代理到Scrapyd以后,Scrapyd本身只需要开通内网访问即可,不许经过输入密码 答案: 正确 ‎★难度:易 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎135、如果目标网站本身就是提供公众查询服务的网站,那么使用爬虫是合法合规的。‎ 答案: 正确 ‎★难度:易 参见章节:第13章 考核知识点:爬虫开发中的法律和道德问题 试题解析:‎ ‎136、自己能查看的数据,允许擅自拿给第三方查看 答案: 错误 ‎★难度:易 参见章节:第13章 考核知识点:爬虫开发中的法律和道德问题 试题解析:自己能查看的数据,不一定被允许擅自拿给第三方查看 ‎137、包含或超过50万人的个人信息,或者包含国家关键信息的数据,如果要转移到境外,必须经过主管或者监管部门组织安全评估。‎ 答案: 正确 ‎★难度:易 参见章节:第13章 考核知识点:爬虫开发中的法律和道德问题 试题解析:‎ ‎138、如果通过爬虫抓取某公司网站的公开数据,分析以后发现这个公司业绩非常好,于是买入该公司股票并赚了一笔钱。这是合法的。‎ 答案: 正确 ‎★难度:易 参见章节:第13章 考核知识点:爬虫开发中的法律和道德问题 试题解析:‎ ‎139、如果通过爬虫抓取某公司网站的公开数据,分析以后发现这个公司业绩非常好。于是将数据或者分析结果出售给某基金公司,从而获得销售收入。这是合法的。‎ 答案: 正确 ‎★难度:易 参见章节:第13章 考核知识点:爬虫开发中的法律和道德问题 试题解析:‎ ‎140、如果通过爬虫抓取某公司网站的公开数据,分析以后发现这个公司业绩非常好,于是首先把数据或者分析结果出售给某基金公司,然后自己再买被爬公司的股票。此时,涉嫌内幕交易,属于严重违法行为。‎ 答案: 正确 ‎★难度:易 参见章节:第13章 考核知识点:爬虫开发中的法律和道德问题 试题解析:‎ ‎141、robots.txt是一种规范,在法律范畴内 答案: 错误 ‎★难度:易 参见章节:第13章 考核知识点:爬虫开发中的法律和道德问题 试题解析:‎ robots.txt并不是一种规范,它只是一种约定,所以即使不遵守也不会受到惩罚。但是从道德上讲,建议遵守 ‎142、爬虫的源代码通过公开不会对被爬虫网站造成影响 答案: 错误 ‎★难度:易 参见章节:第13章 考核知识点:爬虫开发中的法律和道德问题 试题解析:开源是一件好事,但不要随便公开爬虫的源代码。因为别有用心的人可能会拿到被公开的爬虫代码而对网站进行攻击或者恶意抓取数据。‎ ‎(二)、选择部分 ‎1、网络爬虫的用途有()‎ A.收集数据 B.尽职调查 C.提高流量 D.攻击服务器 答案: A B C ‎★难度:中 参见章节:第1章 考核知识点:网络爬虫概念 试题解析:‎ ‎2、以下哪些可以独立成为Python编译器()‎ A.Pycharm B.IDLE C.Eclipse D.Visual Studio 2010‎ 答案: A B ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎3、Python中Object=[1, 2, 3, 4, 5],则Objcet是()‎ A.列表 B.元组 C.字典 D.集合 答案: A ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎4、Python中Object=(1, 2, 3, 4, 5),则Objcet是()‎ A.列表 B.元组 C.字典 D.集合 答案: B ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎5、Python中的容器有()‎ A.列表 B.元组 C.字典 D.集合 答案: A B C D ‎★难度:中 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎6、Python中()与元组由类似的数据读取方式 A.字符串 B.列表 C.字典 D.集合 答案: A B ‎★难度:中 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎7、Python中哪种容器一旦生成就不能修改 A.列表 B.元组 C.字典 D.集合 答案: B ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎8、Python中哪种容器生成后可以修改内容 A.列表 B.元组 C.字典 D.集合 答案: A C D ‎★难度:中 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎9、Python中若定义object=[1, 2, 3, 4, 5],则print(object[-4])输出()‎ A.NULL B.2‎ C.4‎ D.程序报错 答案: B ‎★难度:中 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎10、Python中若定义object=(1, 2, 3, 4, 5),则print(object[1:3])输出()‎ A.12‎ B.123‎ C.23‎ D.234‎ 答案: C ‎★难度:中 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎11、Python中若定义object=[1, 2, 3, 4, 5],则print(object[:3])输出()‎ A.12‎ B.123‎ C.23‎ D.234‎ 答案: B ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎12、Python中若定义object=(1, 2, 3, 4, 5),则print(object[:3])输出()‎ A.345‎ B.34‎ C.45‎ D.123‎ 答案: C ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎13、Python中若定义object="12345",则print(object[::-1])输出()‎ A.1‎ B.5‎ C.54321‎ D.程序报错 答案: C ‎★难度:中 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎14、Python中列表可以用()方法在末尾添加元素 A.add B.append C.plus D.+‎ 答案: B ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎15、Python中Object={'obj_1':'1','obj_2':'2'},则Objcet是()‎ A.列表 B.元组 C.字典 D.集合 答案: C ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎16、Python中Object={1, 2, 3, 4, 5},则Objcet是()‎ A.列表 B.元组 C.字典 D.集合 答案: D ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎17、Python中以下哪个容器里的元素不能重复()‎ A.列表 B.元组 C.字典 D.集合 答案: D ‎★难度:难 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎18、Python中Object={'obj_1':'1','obj_2':'2'},则Objcet.get('boj_1','3')是()‎ A.1‎ B.2‎ C.3‎ D.无输出 答案: A ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎19、Python中Object={'obj_1':'1','obj_2':'2'},则Objcet.get('boj_3','3')是()‎ A.1‎ B.2‎ C.3‎ D.无输出 答案: C ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎20、Python中把列表转换为集合需要使用##函数 A.set B.list C.convert D.change 答案: A ‎★难度:难 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎21、Python中把集合转换为列表需要使用##函数 A.set B.list C.convert D.change 答案: B ‎★难度:难 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎22、执行下面代码,结果为():‎ name_list = []‎ if name_list and name_list[100] == '张三':‎ ‎ print('OK')‎ A.程序报错 B.OK C.NULL D.无输出 答案: B ‎★难度:中 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎23、Python中通过Key来从字典object中读取对应的Value的方法有()‎ A.object[key]‎ B.object.get(key)‎ C.object.pop(key)‎ D.object.pop()‎ 答案: A B ‎★难度:中 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎24、下面代码一共执行循环多少次():‎ for i in range(10):‎ ‎ print(i ** i)‎ A.9‎ B.10‎ C.11#0‎ 答案: B ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎25、下面代码一共执行循环多少次():‎ i=0‎ while i<10:‎ ‎ i+=1‎ A.9‎ B.10‎ C.11#0‎ 答案: B ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎26、Python中跳过本次循环应用关键字()‎ A.break B.continue C.exit D.return 答案: B ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎27、Python中退出循环应用关键字()‎ A.break B.continue C.exit D.return 答案: A ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎28、Python中定义函数关键字为()‎ A.def B.define C.func D.function 答案: A ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎29、Python中一个函数可以有()个return语句 A.0‎ B.1‎ C.多个 D.2‎ 答案: A B C D ‎★难度:难 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎30、Python中一个函数没有返回值则可以写()‎ A.没有return B.return C.return None D.return NULL 答案: A B C ‎★难度:难 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎31、下面Python代码输出为():‎ def default_para_trap(para=[], value=0):‎ ‎ para.append(value)‎ ‎ return para print('第一步:{}'.format(default_para_trap(value=100)))‎ print('第二步:{}'.format(default_para_trap(value=50)))‎ A.第一步:[100]‎ 第二步:[100,50]‎ B.第一步:[100]‎ 第二步:[50]‎ C.第一步:[100]‎ 第二步:[]‎ D.第一步:[100]‎ 第二步:[100]‎ 答案: A ‎★难度:难 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎32、下面Python代码输出为():‎ def default_para_without_trap(para=[], value=0):‎ ‎ if not para:‎ ‎ para = []‎ ‎ para.append(value)‎ ‎ return para print('第一步:{}'.format(default_para_trap(value=100)))‎ print('第二步:{}'.format(default_para_trap(value=50)))‎ A.第一步:[100]‎ 第二步:[100,50]‎ B.第一步:[100]‎ 第二步:[50]‎ C.第一步:[100]‎ 第二步:[]‎ D.第一步:[100]‎ 第二步:[100]‎ 答案: B ‎★难度:难 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎33、Python正则表达式模块的findall方法返回结果为()‎ A.列表 B.元组 C.字典 D.集合 答案: A ‎★难度:易 参见章节:第3章 考核知识点:正则表达式与文件操作 试题解析:‎ ‎34、Python正则表达式模块的findall方法如果没有匹配到结果,则返回结果为()‎ A.空 B.空列表 C.空元组 D.不返回 答案: B ‎★难度:易 参见章节:第3章 考核知识点:正则表达式与文件操作 试题解析:‎ ‎35、Python正则表达式模块的findall方法提取内容包含多个,则返回结果的列表中会包含()‎ A.列表 B.元组 C.字典 D.集合 答案: B ‎★难度:中 参见章节:第3章 考核知识点:正则表达式与文件操作 试题解析:‎ ‎36、Python操作CSV文件可通过()容器的方式操作单元格 A.列表 B.元组 C.字典 D.集合 答案: C ‎★难度:中 参见章节:第3章 考核知识点:正则表达式与文件操作 试题解析:‎ ‎37、Python中()容器有推导式 A.列表 B.元组 C.字典 D.集合 答案: A C D ‎★难度:难 参见章节:第3章 考核知识点:正则表达式与文件操作 试题解析:‎ ‎38、Python读CSV文件需要哪个方法()‎ A.CSVReader B.CsvReader C.DictReader D.FileReader 答案: C ‎★难度:难 参见章节:第3章 考核知识点:正则表达式与文件操作 试题解析:‎ ‎39、Python写CSV文件需要哪个方法()‎ A.CSVWriter B.CsvWriter C.DictWriter D.FileWriter 答案: C ‎★难度:难 参见章节:第3章 考核知识点:正则表达式与文件操作 试题解析:‎ ‎40、以下哪些方法属于Python写CSV文件的方法()‎ A.writeheaders B.writeheader C.writerrows D.writerow 答案: A C D ‎★难度:难 参见章节:第3章 考核知识点:正则表达式与文件操作 试题解析:‎ ‎41、最常见的HTTP请求类型有()‎ A.GET B.POST C.SEND D.RECEIVE 答案: A B ‎★难度:易 参见章节:第4章 考核知识点:简单的网页爬虫方法 试题解析:‎ ‎42、一般来说在页面传输登录信息都用HTTP()请求类型 A.GET B.POST C.PUT D.SEND 答案: B ‎★难度:易 参见章节:第4章 考核知识点:简单的网页爬虫方法 试题解析:‎ ‎43、requests中post请求方法的第二个参数可以为()‎ A.字典 B.列表 C.json数据 D.字符串 答案: A C ‎★难度:难 参见章节:第4章 考核知识点:简单的网页爬虫方法 试题解析:‎ ‎44、requests中post请求方法的使用为requests.post('网址', data=data)中的data为()‎ A.列表 B.元组 C.字典 D.集合 答案: C ‎★难度:中 参见章节:第4章 考核知识点:简单的网页爬虫方法 试题解析:‎ ‎45、requests获取get或者post请求后需要通过()属性获取文本内容 A.content B.text C.string D.body 答案: A ‎★难度:易 参见章节:第4章 考核知识点:简单的网页爬虫方法 试题解析:‎ ‎46、Python中线程池map()方法第二个参数是()‎ A.列表 B.元组 C.字典 D.集合 答案: A ‎★难度:中 参见章节:第4章 考核知识点:简单的网页爬虫方法 试题解析:‎ ‎47、以下哪个HTML标签表示分区或节()‎ A.
‎ B.‎ C.‎ D.
‎ 答案: A ‎★难度:易 参见章节:第5章 考核知识点:信息提取高级方法 试题解析:‎ ‎48、以下哪个HTML标签表示定义文档的主体()‎ A.
‎ B.‎ C.‎ D.
‎ 答案: B ‎★难度:易 参见章节:第5章 考核知识点:信息提取高级方法 试题解析:‎ ‎49、以下哪个HTML标签表示定义文档的头部()‎ A.
‎ B.‎ C.‎ D.
‎ 答案: C ‎★难度:易 参见章节:第5章 考核知识点:信息提取高级方法 试题解析:‎ ‎50、以下哪个HTML标签表示定义文档或节的页脚()‎ A.
‎ B.‎ C.‎ D.
‎ 答案: D ‎★难度:易 参见章节:第5章 考核知识点:信息提取高级方法 试题解析:‎ ‎51、以下哪个HTML标签表示定义无序列表()‎ A.
    ‎ B.
  • ‎ C.‎ D.‎ 答案: A ‎★难度:中 参见章节:第5章 考核知识点:信息提取高级方法 试题解析:‎ ‎52、以下哪个HTML标签表示定义列表项目()‎ A.
      ‎ B.
    • ‎ C.‎ D.‎ 答案: B ‎★难度:中 参见章节:第5章 考核知识点:信息提取高级方法 试题解析:‎ ‎53、以下哪个HTML标签表示定义 HTML 表格中的行()‎ A.
        ‎ B.
      • ‎ C.‎ D.‎ 答案: C ‎★难度:中 参见章节:第5章 考核知识点:信息提取高级方法 试题解析:‎ ‎54、以下哪个HTML标签表示定义 HTML 表格中的标准单元格()‎ A.
          ‎ B.
        • ‎ C.‎ D.‎ 答案: D ‎★难度:中 参见章节:第5章 考核知识点:信息提取高级方法 试题解析:‎ ‎55、在Python中,为了使用XPath,需要安装一个第三方库()‎ A.lxml B.xml C.xpath D.path 答案: A ‎★难度:易 参见章节:第5章 考核知识点:信息提取高级方法 试题解析:‎ ‎56、使用Xpath获取文本使用()‎ A.text B.text()‎ C.content D.content()‎ 答案: B ‎★难度:中 参见章节:第5章 考核知识点:信息提取高级方法 试题解析:‎ ‎57、使用Xpath构造相同字符串开头的路径采用()方法 A.starts-with B.starts C.begin D.begin-with 答案: A ‎★难度:中 参见章节:第5章 考核知识点:信息提取高级方法 试题解析:‎ ‎58、使用Xpath构造属性值包含相同字符串的路径采用()方法 A.contain B.contains C.include D.includes 答案: B ‎★难度:中 参见章节:第5章 考核知识点:信息提取高级方法 试题解析:‎ ‎59、使用xpath方法的返回类型是()‎ A.列表 B.元组 C.字典 D.集合 答案: A ‎★难度:中 参见章节:第5章 考核知识点:信息提取高级方法 试题解析:‎ ‎60、请问按哪个键可以打开Chrome自带的开发者工具()‎ A.F10‎ B.F1‎ C.F11‎ D.F12‎ 答案: D ‎★难度:易 参见章节:第5章 考核知识点:信息提取高级方法 试题解析:‎ ‎61、用Xpathh获取第二个div标签应该是()‎ A.dvi(1)‎ B.div(2)‎ C.div[1]‎ D.div[2]‎ 答案: D ‎★难度:中 参见章节:第5章 考核知识点:信息提取高级方法 试题解析:‎ ‎62、BS4可以用来从()中提取数据 A.HTML B.XML C.数据库 D.JSON 答案: A B ‎★难度:易 参见章节:第5章 考核知识点:信息提取高级方法 试题解析:‎ ‎63、使用BeautifulSoup对象后可以使用()来查找内容 A.find_all B.find C.search D.search_all 答案: A B ‎★难度:易 参见章节:第5章 考核知识点:信息提取高级方法 试题解析:‎ ‎64、针对解析源代码的BeautifulSoup对象,构造时BeautifulSoup(网页源代码, '解析器')中的解析器可以为()‎ A.html B.html.parser C.lxml D.xml 答案: A C ‎★难度:中 参见章节:第5章 考核知识点:信息提取高级方法 试题解析:‎ ‎65、MongoDB中数据存储的形式类似于()‎ A.列表 B.元组 C.字典 D.集合 答案: C ‎★难度:中 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎66、在Mac OS下安装MongoDB使用命令() install mongodb A.brew B.apt-get C.sudo D.apt 答案: A ‎★难度:中 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎67、启动MongoDB使用命令mongod --() usr/local/etc/mongod.conf A.config B.install C.start D.begin 答案: A ‎★难度:中 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎68、以下哪个命令是利用URL语法在命令行下工作的文件传输工具()‎ A.curl B.tar -zxvf C.mkdir D.cp 答案: A ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎69、以下哪个命令是linux下解压缩命令()‎ A.curl B.tar -zxvf C.mkdir D.cp 答案: B ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎70、以下哪个命令是创建文件夹命令()‎ A.curl B.tar -zxvf C.mkdir D.cp 答案: C ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎71、以下哪个命令是复制文件或者文件夹命令()‎ A.curl B.tar -zxvf C.mkdir D.cp 答案: D ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎72、如果使用Python的数据结构来做类比的话,MongoDB中文档相当于一个()‎ A.列表 B.元组 C.字典 D.集合 答案: C ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎73、如果使用Python的数据结构来做类比的话,MongoDB中集合相当于一个()‎ A.列表 B.元组 C.字典 D.集合 答案: A ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎74、如果使用Python的数据结构来做类比的话,MongoDB中库相当于一个()‎ A.列表 B.元组 C.字典 D.集合 答案: C ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎75、如果使用Python的数据结构来做类比的话,MongoDB中库相当于一个大字典,大字典里面的每一个键值对都对应了一个集合,Key为(),Value就是一个集合。‎ A.字典 B.集合的名字 C.集合 D.文档 答案: B ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎76、如果使用Python的数据结构来做类比的话,MongoDB中库相当于一个大字典,大字典里面的每一个键值对都对应了一个集合,Key为集合的名字,Value就是一个()。‎ A.字典 B.集合的名字 C.集合 D.文档 答案: C ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎77、MongoDB中获取名字为db的库的语句为()‎ A.client.db B.client('db')‎ C.client['db']‎ D.client{'db'}‎ 答案: A C ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎78、MongoDB中获取名字为set1的集合的语句为()‎ A.database.set1‎ B.database('set1')‎ C.database['set1']‎ D.database{'set1'}‎ 答案: A C ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎79、MongoDB中可以将()数据结构插入集合中 A.列表 B.元组 C.字典 D.集合 答案: C ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎80、以下哪种方法是MongoDB的查找方法()‎ A.find B.find_one C.finds D.find_all 答案: A B ‎★难度:中 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎81、PyMongo中的查找方法的参数是哪种数据结构()‎ A.列表 B.元组 C.字典 D.集合 答案: C ‎★难度:中 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎82、PyMongo中逻辑查询表示大于的符号是()‎ A.$gt B.$lt C.$gte$$lte 答案: A ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎83、PyMongo中逻辑查询表示大于等于的符号是()‎ A.$gt B.$lt C.$gte$$lte 答案: C ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎84、PyMongo中逻辑查询表示小于的符号是()‎ A.$gt B.$lt C.$gte$$lte 答案: B ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎85、PyMongo中逻辑查询表示小于等于的符号是()‎ A.$gt B.$lt C.$gte$$lte 答案: D ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎86、PyMongo中逻辑查询表示等于的符号是()‎ A.$gt B.$lt C.$eq$$ne 答案: C ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎87、PyMongo中逻辑查询表示不等于的符号是()‎ A.$gt B.$lt C.$eq$$ne 答案: D ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎88、PyMongo中查询所有age > 29的记录是()‎ A.collection.find({'age': {'$gt': 29}})‎ B.collection.find({'age'>29})‎ C.collection.find_all({'age': {'$gt': 29}})‎ D.collection.find_all({'age'>29})‎ 答案: A ‎★难度:中 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎89、PyMongo更新操作有()‎ A.update B.update_all C.update_one D.update_many 答案: C D ‎★难度:中 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎90、PyMongo删除操作有()‎ A.delete B.delete_all C.delete_one D.delete_many 答案: C D ‎★难度:中 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎91、Redis是一个开源的使用()语言编写 A.ANSI C B.C++‎ C.JAVA D.Python 答案: A ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎92、Redis是()数据库 A.关系数据库 B.键值数据库 C.列存数据库 D.图数据库 答案: B ‎★难度:难 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎93、Redis是遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库 A.‎ 答案: T ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎94、Redis中的值可以支持()‎ A.列表 B.哈希 C.集合 D.有序集合 答案: A B C D ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎95、Redis若要进入交互环境,需要打开终端输入()‎ A.redis-cli B.redis C.redis-cmd D.redis-start 答案: A ‎★难度:难 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎96、Redis中写数据到列表中,使用关键字()‎ A.push B.append C.lpush D.lappend 答案: C ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎97、Redis中查看一个列表长度,使用关键字()‎ A.len B.length C.llen D.count 答案: C ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎98、Redis中如果不删除列表中的数据,又要把数据读出来,就需要使用关键字()‎ A.range B.lrange C.srange D.pop 答案: B ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎99、Redis中读取数据语句lrange chapter 0 3,那么表示读列表中()个值 A.2‎ B.3‎ C.4‎ D.5‎ 答案: C ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎100、Redis中往集合中添加数据,使用关键字()‎ A.sadd B.add C.append D.sappend 答案: A ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎101、Redis中往集合中读数据,使用关键字()‎ A.pop B.spop C.lpop D.range 答案: B ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎102、Redis中从集合中查看有多少个值,用关键字()‎ A.scard B.card C.count D.distinct 答案: A ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎103、采用以下()技术可以实现异步加载 A.HTML B.AJAX C.CSS D.HTTP 答案: B ‎★难度:易 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎104、某些网站在发起Ajax请求时会携带()字符串用于身份验证 A.Token B.Cookie C.ReqTime D.sum 答案: A ‎★难度:中 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎105、查看网站请求一般在Chrome开发者模式下的()选项卡中查看 A.Console B.Sources C.Network D.Performance 答案: C ‎★难度:易 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎106、Python中的()库用于发送网络请求 A.web B.request C.requests D.javascript 答案: C ‎★难度:易 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎107、Python在Windows路径字符串左引号的左边加()符号来避免反斜杠问题 A.s B.c C.d D.r 答案: D ‎★难度:易 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎108、通常使用()工具来模拟浏览器进行爬虫请求 A.Selenium B.Chrome C.ChromeDriver D.WebDriver 答案: A ‎★难度:易 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎109、下列哪项不是HTTP的请求类型()‎ A.GET B.POST C.PUT D.SET 答案: D ‎★难度:中 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎110、当需要把Python里面的数据发送给网页时,需要先转换成()字符串 A.Python B.Json C.正则表达式 D.Ajax 答案: B ‎★难度:易 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎111、通过()爬取伪装成异步加载的后端渲染数据 A.正则表达式 B.Json字符串 C.JavaScript D.Get 答案: A ‎★难度:难 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎112、使用Selennium获取网页中元素的方法有 A.find_element_by_name B.find_element_by_id C.find_elements_by_name D.find_elements_by_id 答案: A B C D ‎★难度:中 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎113、带上通过Chrome浏览器从评论页面复制而来的()再发起请求,可以减少爬虫被网站封锁的概率 A.Cookie B.Html C.Headers D.CSS 答案: C ‎★难度:中 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎114、当需要把Python里面的数据发送给网页时,应先将其转换成()‎ A.Json字符串 B.GET C.POST D.Request 答案: A ‎★难度:中 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎115、服务器端记录信息确定用户身份的数据是 A.session B.cookies C.moonpies D.localstorage 答案: A ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎116、浏览器用来记录用户状态信息的数据叫 A.session B.cookies C.moonpies D.selenium 答案: B ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎117、Chrome的开发者工具中哪个选项可以查找到cookies A.Elements B.Sources C.Network D.Peformance 答案: C ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎118、以下表示请求正常处理的HTTP状态码为 A.200‎ B.301‎ C.404‎ D.500‎ 答案: A ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎119、以下表示请求资源找不到的HTTP状态码为 A.200‎ B.301‎ C.404‎ D.500‎ 答案: C ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎120、以下表示请求资源重定向的HTTP状态码为 A.200‎ B.301‎ C.404‎ D.500‎ 答案: B ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎121、python中可以用来将图片中的文字转换为文本的第三方类库是 A.lxml B.requests C.beautifulsoup D.pytesseract 答案: D ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎122、可以通过()绕过网站登录。‎ A.session B.cookies C.moonpies D.localstorage 答案: B ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎123、chrome默认打开开发者工具的快捷是 A.F5‎ B.F11‎ C.F12‎ D.F2‎ 答案: C ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎124、cookies的缺点是 A.实现自动登录 B.跟踪用户状态 C.http中明文传输 D.增加http请求的流量 答案: C D ‎★难度:中 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎125、HTTP常用状态码表明请求被正常处理的有()‎ A.200‎ B.301‎ C.302‎ D.204‎ 答案: A D ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎126、HTTP常用状态码表明表明浏览器需要执行某些特殊的处理以正确处理请求的有()‎ A.200‎ B.301‎ C.302‎ D.204‎ 答案: B C ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎127、HTTP常用状态码表明表明客户端是发生错误的原因所在的有()‎ A.403‎ B.404‎ C.500‎ D.503‎ 答案: A B ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎128、HTTP常用状态码表明表明服务器本身发生错误的有()‎ A.403‎ B.404‎ C.500‎ D.503‎ 答案: C D ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎129、HTTP常用状态码表明服务器内部资源出故障了的是()‎ A.500‎ B.503‎ C.403‎ D.404‎ 答案: A ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎130、HTTP常用状态码表明服务器正忙的是()‎ A.500‎ B.503‎ C.403‎ D.404‎ 答案: B ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎131、HTTP常用状态码表明服务器上没有请求的资源的是()‎ A.500‎ B.503‎ C.403‎ D.404‎ 答案: D ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎132、HTTP常用状态码表明服务器不允许访问那个资源的是()‎ A.500‎ B.503‎ C.403‎ D.405‎ 答案: C ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎133、HTTP状态码401表示 A.请求报文中可能存在语法错误 B.请求需要通过HTTP认证 C.请求资源的访问被拒绝 D.服务器上没有请求的资源 答案: B ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎134、打码平台一般通过()识别验证码。‎ A.人工识别 B.机器学习识别 C.光学字符识别 D.深度学习识别 答案: A ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎135、Python中专门用来处理图像的第三方库是 A.lxml B.Pillow C.beautifulsoup D.pytesseract 答案: B ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎136、以下HTTP状态码与302等价的是 A.301‎ B.303‎ C.304‎ D.307‎ 答案: D ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎137、常用的会话跟踪技术是 A.session B.cookies C.moonpies D.localstorage 答案: A B ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎138、以下HTTP状态码表示服务器没有正常返回结果的是 A.200‎ B.301‎ C.404‎ D.500‎ 答案: B C D ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎139、要使用tesseract来进行图像识别,需要安装两个第三方库 A.requests B.beautifulsoup C.Pillow D.pytesseract 答案: C D ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎140、自动填充验证码的方式有 A.手动识别填写 B.图像识别 C.打码网站 D.浏览器自动识别 答案: B C ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎141、以下HTTP状态码表示服务器本身发生错误的是 A.400‎ B.503‎ C.302‎ D.500‎ 答案: B D ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎142、cookies的缺点是 A.实现自动登录 B.跟踪用户状态 C.http中明文传输 D.增加http请求的流量 答案: C D ‎★难度:中 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎143、以下关于Charles的说法正确的是( )‎ A.Charles是一个跨平台的HTTP抓包工具,可以截取HTTP或者HTTPS请求的数据包 B.Charles有Windows 32/64版和Linux 64 版,但是目前还没有对Mac OS进行有效的支持。‎ C.Charles上面滚动的数据就是目前计算机发起的数据包。单击工具栏上面的黄色笤帚图标,可以清停止抓包。‎ D.在Charles启动时,系统自带浏览器的部分HTTP流量不会经过Charles。‎ 答案: A ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎144、下面关于Charles使用说法错误的是()‎ A.在数据包非常多的情况下,使用Charles的过滤功能来对数据包进行过滤从而减少干扰。‎ B.通过单击图中方框框住的各个选项卡,可以非常直观地观察到请求和返回的各种信息。‎ C.如果浏览器是Chrome,在没有安装第三方代理插件的情况下,Chrome的HTTP流量都会经过Charles。‎ D.Charles无法支持计算机上除了浏览器之外的其他软件。‎ 答案: D ‎★难度:中 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎145、下列关于在IOS上配置charles的说法正确的是()‎ A.不同ios设备之间会有比较大的差别,所以配置的时候需要找到对应的安装证书的入口。‎ B.手机和电脑需要在同一个局域网下。‎ C.HTTP代理可以使用“自动”选项。‎ D.安装好证书以后,打开iOS设备上的任何一个App,可以看到Charles中有数据包在流动 答案: B D ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎146、下列说法错误的是()‎ A.小程序的请求极其简单,基本上没有验证信息 B.用Python来请求小程序的后台接口从而获取数据,比请求异步加载网页的后台接口要复杂很多。‎ C.如果目标网站有微信小程序,那么一定要优先调查能否通过小程序的接口来抓取数据。‎ D.小程序的反爬虫能力比网页版的低很多。使用小程序的接口来爬数据,能极大提高爬虫的开发效率。‎ 答案: B ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎147、下列说法错误的是()‎ A.Charles只能截获HTTP和HTTPS的数据包,如果网站使用的是websocket或者是flashsocket,那么Charles就无能为力。‎ B.有一些App会自带证书,使用其他证书都无法正常访问后台接口。在这种情况下,Charles自带的证书就不能正常使用,也就没有办法抓取这种App的数据 C.有一些App的数据经过加密,App接收到数据以后在其内部进行解密。Charles无法获取这种App的数据 D.对于上述情况,Charles能抓取到经过加密的数据。但是如果无法知道数据的具体加密方法,就没有办法 答案: C ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎148、下列关于mitmproxy的安装说法错误的是()‎ A.对于Mac OS系统,使用Homebrew安装mitmproxy,命令为:brew install mitmproxy B.在Ubuntu中,要安装mitmproxy,首先需要保证系统的Python为Python 3.5或者更高版本 C.在windows系统中无法使用linux的命令,只能通过下载安装包来安装 D.UBUNTU中执行命令 sudo pip3 install mitmproxy 进行安装 答案: C ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎149、下列关于mitmproxy的使用说法正确的是()‎ A.mitmproxy的端口为8080端口。‎ B.设置好代理以后,在手机上打开一个App或者打开一个网页,可以看到mitmproxy上面有数据滚动。‎ C.用鼠标在终端窗口上单击其中的任意一个请求,可以显示这个数据包的详情信息。‎ D.如果要访问HTTPS网站,还需要安装mitmproxy的证书 答案: A B C D ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎150、使用python定制mitmproxy,下面的语句请求的是()。{req.headers["User-Agent"]}‎ A.headers B.文本内容 C.目标网站 D.user-agent 答案: D ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎151、下列说法错误的是()‎ A.mitmproxy的强大之处在于它还自带一个mitmdump命令。这个命令可以用来运行符合一定规则的Python脚本,并在Python脚本里面直接操作HTTP和HTTPS的请求,以及返回的数据包。‎ B.命令行中执行mitmdump -s parse_request.py即可运行python 脚本 C.使用python可以自定义返回的数据包,如 response.headers,就是返回的头部信息 D.如果返回的是JSON类型的字符串,python无法进行解析。‎ 答案: A B C ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎152、在配置ios使用Charles的操作中,正确的有()‎ A.对于苹果设备,首先要保证计算机和苹果设备联在同一个Wi-Fi上。‎ B.选择“HTTP代理”下面的“手动”选项卡,在“服务器”处输入计算机的IP地址,在“端口”处输入8888‎ C.输入完成代理以后按下苹果设备的Home键,设置就会自动保存。‎ D.安装完成证书以后,在设置中打开“关于本机”,找到最下面的“证书信任设置”,并在里面启动对Charles证书的完全信任 答案: A B C D ‎★难度:中 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎153、要使用Python来操作UI Automator从而控制手机,需要安装一个第三方库()‎ A.uiautomator B.automator C.ui_automator D.pyautomator 答案: A ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎154、Python并导入uiautomator来操作设备的语句是from uiautomator import ()‎ A.Device B.Devices C.Jobs D.Job 答案: A ‎★难度:中 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎155、使用UI Automator打开微信的操作是获取相应图标后使用命令()‎ A.touch B.click C.push D.hover 答案: B ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎156、如果计算机上连接了很多台手机,查看这些手机串号,需要在终端输入以下命令:()‎ A.adb device B.adb devices C.adb devices -l D.adb devices -list 答案: C ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎157、使用UI Automator获取屏幕上显示的文本内容的操作是得到相应控件后使用命令()‎ A.content B.text C.title D.body 答案: B ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎158、使用UI Automator获滚动屏幕的操作是得到相应控件后使用命令()‎ A.scroll B.scroll_up C.scroll_forword D.scroll_back 答案: A ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎159、使用UI Automator使屏幕向上滚动一屏的操作是得到相应控件后使用命令()‎ A.scroll_forwad B.scroll_up C.scroll.forward D.scroll.vert.forward 答案: D ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎160、使用UI Automatorr让屏幕向左滚动的操作是得到相应控件后使用命令()‎ A.scroll.left B.scroll.horiz.left C.scroll.forward D.scroll.horiz.forward 答案: D ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎161、使用UI Automatorr根据坐标来滑动桌面的操作是得到相应控件后使用命令()‎ A.swipe B.move C.scroll D.fly 答案: A ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎162、使用UI Automatorr长按点击的操作是得到相应控件后使用命令()‎ A.longclick B.long_click C.clicklong D.click_long 答案: B ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎163、使用UI Automatorr输入文字的操作是得到相应控件后使用命令()‎ A.settext B.set C.set_text D.text 答案: C ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎164、使用UI Automatorr判断元素是否存在的操作是得到相应控件后使用命令()‎ A.exist B.exists C.isnull D.contains 答案: B ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎165、使用UI Automatorr点亮屏幕的操作是得到相应控件后使用命令()‎ A.wakeup B.light C.bright D.sleep 答案: A ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎166、打开终端,输入(),屏幕上会出现Python的路径 A.python path B.path python C.which python D.python which 答案: C ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎167、在Linux中哪个命令是添加权限的()‎ A.chmod B.sudo C.cp D.mkdir 答案: A ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎168、windows中创建定时任务的命令为 A.task B.schtasks C.createtasks D.maketasks 答案: B ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎169、Python中有哪些实现多线程方法()‎ A.multiprocess.dummy B.threading.Thread C.process D.PyMongoDB 答案: A B ‎★难度:中 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎170、当爬虫创建好了之后,可以使用"scrapy()<爬虫名>" 命令运行爬虫。‎ A.startup B.starwar C.drawl D.crawl 答案: D ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎171、在Scrapy的目录下,哪个文件负责存放爬虫文件?()‎ A.spiders文件夹 B.item.py C.pipeline.py D.settings.py 答案: A ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎172、在Scrapy的目录下,哪个文件负责定义需要爬取的数据?()‎ A.spiders文件夹 B.item.py C.pipeline.py D.settings.py 答案: B ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎173、在Scrapy的目录下,哪个文件负责数据抓取以后的处理工作?()‎ A.spiders文件夹 B.item.py C.pipeline.py D.settings.py 答案: C ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎174、在Scrapy的目录下,哪个文件负责存放爬虫的各种配置信息?()‎ A.spiders文件夹 B.item.py C.pipeline.py D.settings.py 答案: D ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎175、要想让Scrapy结合Redis,应该对Scrapy爬虫请求的调度算法进行修改,以下哪种修改不能完成这一任务?()‎ A.队列 B.栈 C.上锁 D.优先级队列 答案: C ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎176、xpath中extract方法返回值类型是()‎ A.列表 B.元组 C.字典 D.集合 答案: A ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎177、参数headers=(),把请求头添加到Scrapy请求中,使爬虫的请求看起来像是从浏览器发起的。‎ A.HEADER B.HEADERS C.HEAD D.BODY 答案: B ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎178、()是一个传递信息的通道。它负责将爬取博文列表页获取到的信息传递给负责爬取正文页的方法中。‎ A.meta B.head C.header D.body 答案: A ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎179、Scrapy中使用Xpath获得的结果调用了.extract方法,结果以()形式生成 A.列表 B.元组 C.字典 D.集合 答案: A ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎180、lxml库中etree模块的()方法把Selector对象转换为bytes型的源代码数据 A.etree.tostring B.etree.convertBytes C.etree.toBytes D.etree.convertstring 答案: A ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎181、Scrapy自带的待爬队列是()‎ A.deque B.queue C.list D.lqueue 答案: A ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎182、使用了RedisSpider作为爬虫的父类以后,爬虫会直接监控()中的数据,并不读取start_urls中的数据。‎ A.Redis B.RedisSpider C.Spider D.MongoDB 答案: A ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎183、Scrapy_redis是Scrapy的“()”,它已经封装了使用Scrapy操作Redis的各个方法 A.组件 B.模块 C.控件 D.单元 答案: A ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎184、下载器中间件的作用有哪些?‎ A.更换代理IP B.更换Cookies C.更换User-Agent D.自动重试 答案: A B C D ‎★难度:易 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎185、当爬虫运行到yield scrapy.Request()或者yield item的时候,下列哪个爬虫中间件的方法被调用?‎ A.process_spider_output()‎ B.process_spider_exception()‎ C.process_spider_input()‎ D.process_start_ requests()‎ 答案: A ‎★难度:中 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎186、一个可行的自动更换代理的爬虫系统,应该下列哪些功能?‎ A.有一个小爬虫ProxySpider去各大代理网站爬取免费代理并验证,将可以使用的代理IP保存到数据库中 B.在发现某个请求已经被设置过代理后,什么也不做,直接返回 C.在ProxyMiddlerware的process_request中,每次从数据库里面随机选择一条代理IP地址使用 D.周期性验证数据库中的无效代理,及时将其删除 答案: A C D ‎★难度:中 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎187、为了解决爬虫代码本身的错误引起的异常,可以采用下列哪些方法 A.仔细检查代码 B.开发爬虫中间件 C.开发下载器中间件 D.等待 答案: A B ‎★难度:中 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎188、()是Scrapy官方开发的,用来部署、运行和管理Scrapy爬虫的工具 A.Scrapyd B.ScrapyDeploy C.Deploy D.Scrapy_Deploy 答案: A ‎★难度:易 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎189、如果爬虫爬取的是商业网站,并且目标网站使用了反爬虫机制,那么强行突破反爬虫机制可能构成()‎ A.非法侵入计算机系统罪 B.非法获取计算机信息系统数据罪 C.非法获取计算机数据罪 D.非法获取系统罪 答案: A B ‎★难度:中 参见章节:第13章 考核知识点:爬虫开发中的法律和道德问题 试题解析:‎ ‎190、如果目标网站有反爬虫声明,那么对方在被爬虫爬取以后,可以根据()来起诉使用爬虫的公司 A.服务器日志 B.数据库日志记录 C.程序日志记录 D.服务器监控 答案: A B C D ‎★难度:难 参见章节:第13章 考核知识点:爬虫开发中的法律和道德问题 试题解析:‎ ‎191、网站根目录中哪个文件里面的内容会告诉爬虫哪些数据是可以爬取的,哪些数据是不可以爬取的()。‎ A.robot.txt B.robot.html C.robots.txt D.robots.html 答案: C ‎★难度:易 参见章节:第13章 考核知识点:爬虫开发中的法律和道德问题 试题解析:‎ ‎192、在Scrapy工程的settings.py文件中,哪个配置项,如果设置为True,那么Scrapy就会自动跳过网站不允许爬取的内容()‎ A.ROBOTSTXT_ OBEY B.ROBOTSTXT_JUDGE C.ROBOTSTXT D.ROBOTSTXT_ IF 答案: A ‎★难度:易 参见章节:第13章 考核知识点:爬虫开发中的法律和道德问题 试题解析:‎ ‎193、如果很多爬虫同时对一个网站全速爬取,那么其实就是对网站进行了()攻击 A.XSS B.DOS C.DDOS D.跨域 答案: C ‎★难度:易 参见章节:第13章 考核知识点:爬虫开发中的法律和道德问题 试题解析:‎ 二、主观部分:‎ ‎(一)、填空部分 ‎1、Ubuntu中安装Python的语句为sudo ______ install python3.6 python3-dev python3-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev 答案: apt-get ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎2、Python中若定义object=(1, 2, 3, 4, 5),则print(object[-2])输出______‎ 答案: 4‎ ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎3、Python中若定义object=(1, 2, 3, 4, 5),则print(object[:3])输出______‎ 答案: 45‎ ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎4、Python中若定义object=[1, 2, 3, 4, 5],则print(object[1:3])输出______‎ 答案: 23‎ ‎★难度:难 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎5、Python中若定义object=(1, 2, 3, 4, 5),则print(object[:3])输出______‎ 答案: 123‎ ‎★难度:中 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎6、Python中若定义object=[1, 2, 3, 4, 5],则print(object[::-1])输出______‎ 答案: [5,4,3,2,1]‎ ‎★难度:难 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎7、Python中若object_1=[1,2],object_2=[3,4],则print(object_1+object_2)输出为______‎ 答案: [1,2,3,4]‎ ‎★难度:中 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎8、Python中跳过本次循环应用关键字______‎ 答案: continue ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎9、Python中退出循环应用关键字______‎ 答案: break ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎10、Python中定义函数关键字为______‎ 答案: def ‎★难度:易 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎11、Python正则表达式模块的findall方法若想忽略换行符,需要哪个flag:______‎ 答案: re.S ‎★难度:难 参见章节:第3章 考核知识点:正则表达式与文件操作 试题解析:‎ ‎12、使用pip安装requests的命令为______‎ 答案: pip install requests ‎★难度:易 参见章节:第4章 考核知识点:简单的网页爬虫方法 试题解析:‎ ‎13、Python中若要获取0-9,10个数字的列表,则应如何补充代码origin_num = [x for x in range(______)]‎ 答案: 10‎ ‎★难度:易 参见章节:第4章 考核知识点:简单的网页爬虫方法 试题解析:‎ ‎14、Windows下启动MongoDB命令是______‎ 答案: mongod.exe --config mongodb.conf ‎★难度:难 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎15、Linux下启动MongoDB命令是______ --config mongodb.conf 答案: mongod ‎★难度:难 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎16、Linux下启动MongoDB命令是mongod --config ______‎ 答案: mongodb.conf ‎★难度:难 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎17、MongoDB如果需要从外网访问数据库,那么需要修改安装MongoDB时用到的配置文件______‎ 答案: mongod.conf ‎★难度:难 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎18、PyMongo中查询29 ≤ age ≤ 40的记录的语句是collection.______‎ 答案: find({'age': {'$gte': 29, '$lte': 40}})‎ ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎19、PyMongo针对age字段操作将所有年龄为20岁的人年龄全部改为30的语句为collection.______‎ 答案: update_many({‘age’:20},{‘$set’:{‘age’:30}})‎ ‎★难度:难 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎20、PyMongo针对age字段操作将将第一个年龄为20岁的人删除的语句为collection.______‎ 答案: delete_one({‘age’:20})‎ ‎★难度:难 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎21、PyMongo针对age字段去重的语句为collection.______‎ 答案: distinct('age')‎ ‎★难度:难 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎22、在MacOS下运行Redis命令为______ /user/local/etc/redis.conf 答案: redis-server ‎★难度:中 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎23、在Windows下运行Redis命令为______ redis.windows.conf 答案: redis-server.exe ‎★难度:中 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎24、一般通过______表达式来解析网页数据 答案: 正则 ‎★难度:易 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎25、实现异步加载需要利用______技术 答案: Ajax ‎★难度:易 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎26、普通的异步加载,可以使用______库直发送AJAX请求来获取被加载的内容 答案: requests ‎★难度:易 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎27、使用UI Automatorr操作实体键的命令中电源键的按键名称为______‎ 答案: power ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎28、使用UI Automatorr操作实体键的命令中返回键的按键名称为______‎ 答案: back ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎29、使用UI Automatorr操作实体键的命令中菜单键的按键名称为______‎ 答案: menu ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎30、使用UI Automatorr操作实体键的命令中音量增大键的按键名称为______‎ 答案: volume_up ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎31、使用UI Automatorr操作实体键的命令中音量减小键的按键名称为______‎ 答案: volume_down ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎32、使用UI Automatorr操作实体键的命令中返回键的按键名称为______‎ 答案: home ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎33、在Scrapy的依赖库文件中,pywin32和Twisted的底层是基于______开发的。‎ 答案: C语言 ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎34、在Windows系统中搭建Scrapy环境时,______和______这两个第三方库不能使用常规的方法安装。‎ 答案: lxml , pywin32‎ ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎35、settings.py中pipeline后面数字代表优先级,当数字越大,则优先级越______‎ 答案: 低 ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎36、获取extract()方法返回值的第一个,可以使用______来进行 答案: extract()[0]‎ ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎37、______是负责处理详情页并获取信息的一个方法。它负责从整个正文页中提取发布时间、文章分类和正文HTML。‎ 答案: self.parse_detail ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎38、使用了RedisSpider作为爬虫的父类以后,爬虫会直接监控______中的数据,并不读取start_urls中的数据。‎ 答案: Redis ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎39、爬虫中间件scrapy.spidermiddlewares.httperror.HttpErrorMiddleware的顺序号是______‎ 答案: 50‎ ‎★难度:难 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎40、爬虫中间件scrapy.spidermiddlewares.offsite.OffsiteMiddleware的顺序号是______‎ 答案: 500‎ ‎★难度:难 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎41、爬虫中间件scrapy.spidermiddlewares.referer.RefererMiddleware的顺序号是______‎ 答案: 700‎ ‎★难度:难 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎42、爬虫中间件scrapy.spidermiddlewares.urllength.UrlLengthMiddleware的顺序号是______‎ 答案: 800‎ ‎★难度:难 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎43、爬虫中间件scrapy.spidermiddlewares.depth.DepthMiddleware的顺序号是______‎ 答案: 900‎ ‎★难度:难 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎(二)、名词解释题 ‎1、网络爬虫 答案: 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。‎ ‎★难度:易 参见章节:第1章 考核知识点:网络爬虫概念 试题解析:‎ ‎2、通用网络爬虫 答案: 通用网络爬虫又称全网爬虫(Scalable Web Crawler),爬行对象从一些种子 URL 扩充到整个 Web,主要为门户站点搜索引擎和大型 Web 服务提供商采集数据。‎ ‎★难度:易 参见章节:第1章 考核知识点:网络爬虫概念 试题解析:‎ ‎3、聚焦网络爬虫 答案: 聚焦网络爬虫(Focused Crawler),又称主题网络爬虫(Topical Crawler),是指选择性地爬行那些与预先定义好的主题相关页面的网络爬虫。‎ ‎★难度:易 参见章节:第1章 考核知识点:网络爬虫概念 试题解析:‎ ‎4、HTTP 答案: Hypertext Transfer Protocol,超文本传输协议 ‎★难度:易 参见章节:第4章 考核知识点:简单的网页爬虫方法 试题解析:‎ ‎5、Python中的requests 答案: requests是Python的一个第三方HTTP(Hypertext Transfer ‎ Protocol,超文本传输协议)库,它比Python自带的网络库urllib更加简单、方便和人性化。使用requests可以让Python实现访问网页并获取源代码的功能。‎ ‎★难度:易 参见章节:第4章 考核知识点:简单的网页爬虫方法 试题解析:‎ ‎6、Python的库 答案: 在Python开发的过程中,常常需要将一些功能比较通用的代码抽离出来作为一个单独的模块,从而被多个工程调用。这种公共的模块称为Python的库(Library,Lib)‎ ‎★难度:易 参见章节:第4章 考核知识点:简单的网页爬虫方法 试题解析:‎ ‎7、multiprocessing 答案: multiprocessing本身是Python的多进程库,用来处理与多进程相关的操作 ‎★难度:易 参见章节:第4章 考核知识点:简单的网页爬虫方法 试题解析:‎ ‎8、HTML 答案: HTML是一种结构化的标记语言,可以描述一个网页的结构信息 ‎★难度:易 参见章节:第5章 考核知识点:信息提取高级方法 试题解析:‎ ‎9、CSS 答案: Cascading Style Sheets,层叠样式表 ‎★难度:易 参见章节:第5章 考核知识点:信息提取高级方法 试题解析:‎ ‎10、Xpath 答案: XPath(XML Path)是一种查询语言,它能在XML和HTML的树状结构中寻找结点 ‎★难度:易 参见章节:第5章 考核知识点:信息提取高级方法 试题解析:‎ ‎11、XML 答案: Extensible Markup Language,可扩展标记语言 ‎★难度:易 参见章节:第5章 考核知识点:信息提取高级方法 试题解析:‎ ‎12、URI 答案: Uniform Resource Identifier,统一资源标志符 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎13、Redis 答案: Remote Dictionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统 ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎14、AJAX 答案: AJAX是Asynchronous JavaScript And XML的首字母缩写,意为异步JavaScript与XML ‎★难度:易 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎15、JSON 答案: JSON的全称是JavaScript Object Notation,是一种轻量级的数据交换格式。网络之间使用HTTP方式传递数据的时候,绝大多数情况下传递的都是字符串 ‎★难度:易 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎16、请求头 答案: Headers称为请求头,浏览器可以将一些信息通过Headers传递给服务器,服务器也可以将一些信息通过Headers传递给浏览器 ‎★难度:中 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎17、Selenium 答案: Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。‎ ‎★难度:中 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎18、cookies 答案 ‎: Cookie是用户使用浏览器访问网站的时候网站存放在浏览器中的一小段数据。‎ ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎19、HTTP状态码 答案: HTTP状态码是当客户端向服务器发送请求时,服务端描述返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了请求还是出现了错误。‎ ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎20、404 Not Found 答案: 404 Not Found是HTTP状态码,表示服务器上没有请求的资源。‎ ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎21、pytesseract 答案: pytesseract是python中的开源类库,它的作用是将图像中文字转换为文本。‎ ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎22、数据抓包 答案: 抓包就是在网络数据的传输过程中对数据包进行截获、查看、修改或转发的过程。‎ ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎23、中间人爬虫 答案: 中间人爬虫就是利用了中间人攻击的原理来实现数据抓取的一种爬虫技术 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎24、中间人攻击 答案: 中间人(Man-in-the-Middle,MITM)攻击是指攻击者与通信的两端分别创建独立的联系,并交换其所收到的数据,使通信的两端认为其正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎25、UiAutomator 答案: UiAutomator是Google官方提供的Android自动化图形接口测试框架 ‎★难度:易 参见章节:第10章 考核知识点:Android原生App爬虫 试题解析:‎ ‎26、Scrapy 答案: Scrapy是基于Python的分布式爬虫框架,可以非常方便地实现分布式爬虫。‎ ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎27、Twisted 答案: Twisted是Python中的一个非常重要的基于事件驱动的异步输入/输出(Input/Output,I/O)引擎 ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎28、DDOS 答案: Distributed Denial-of-Service,分布式拒绝服务 ‎★难度:易 参见章节:第13章 考核知识点:爬虫开发中的法律和道德问题 试题解析:‎ ‎(三)、问答题 ‎1、通用性搜索引擎局限性是什么?‎ 答案: (1)不同领域、不同背景的用户往往具有不同的检索目的和需求,通用搜索引擎所返回的结果包含大量用户不关心的网页。‎ ‎(2)通用搜索引擎的目标是尽可能大的网络覆盖率,有限的搜索引擎服务器资源与无限的网络数据资源之间的矛盾将进一步加深。‎ ‎(3)万维网数据形式的丰富和网络技术的不断发展,图片、数据库、音频、视频多媒体等不同数据大量出现,通用搜索引擎往往对这些信息含量密集且具有一定结构的数据无能为力,不能很好地发现和获取。‎ ‎(4)通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询。‎ ‎★难度:中 参见章节:第1章 考核知识点:网络爬虫概念 试题解析:‎ ‎2、聚焦网络爬虫与通用网络爬虫区别?‎ 答案: 和通用网络爬虫相比,聚焦爬虫只需要爬行与主题相关的页面,极大地节省了硬件和网络资源,保存的页面也由于数量少而更新快,还可以很好地满足一些特定人群对特定领域信息的需求 。‎ ‎ 聚焦网络爬虫和通用网络爬虫相比,增加了链接评价模块以及内容评价模块。聚焦爬虫爬行策略实现的关键是评价页面内容和链接的重要性,不同的方法计算出的重要性不同,由此导致链接的访问顺序也不同。‎ ‎★难度:中 参见章节:第1章 考核知识点:网络爬虫概念 试题解析:‎ ‎3、元组和列表的区别 答案: 列表生成以后还可以往里面继续添加数据,也可以从里面删除数据;‎ ‎ 元组一旦生成就不能修改。‎ ‎ 如果元组里面只有整数、浮点数、字符串、另一个元组,就既不能添加数据,也不能删除数据,还不能修改里面数据的值。但是如果元组里面包含了一个列表,那么这个元组里面的列表依旧可以变化。‎ ‎★难度:中 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎4、Python中条件语句的短路效应是什么 答案: (1)在使用and连接的多个表达式中,只要有一个表达式不为真,那么后面的表达式就不会执行。‎ ‎(2)在使用or连接的多个表达式中,只要有一个表达式为真,那么后面的表达式就不会执行。‎ ‎★难度:中 参见章节:第2章 考核知识点:Python基础 试题解析:‎ ‎5、Python正则表达式模块的findall方法原型及参数含义 答案: findall的函数原型为:‎ re.findall(pattern, string, flags=0)‎ ‎ pattern表示正则表达式,string表示原来的字符串,flags表示一些特殊功能的标志。‎ ‎★难度:中 参见章节:第3章 考核知识点:正则表达式与文件操作 试题解析:‎ ‎6、Python正则表达式模块的search方法原型及参数含义 答案: search()的函数原型为:‎ re.search(pattern, string, flags=0)‎ ‎ pattern表示正则表达式,string表示原来的字符串,flags表示一些特殊功能的标志。‎ ‎★难度:中 参见章节:第3章 考核知识点:正则表达式与文件操作 试题解析:‎ ‎7、Python正则表达式中search和findall方法比较 答案: search()的用法和findall()的用法一样,但是search()只会返回第1个满足要求的字符串。一旦找到符合要求的内容,它就会停止查找。‎ ‎★难度:中 参见章节:第3章 考核知识点:正则表达式与文件操作 试题解析:‎ ‎8、Python中正则表达式下“.*”和“.*?”的区别 答案: ①“.*”:贪婪模式,获取最长的满足条件的字符串。‎ ‎②“.*?”:非贪婪模式,获取最短的能满足条件的字符串。‎ ‎★难度:难 参见章节:第3章 考核知识点:正则表达式与文件操作 试题解析:‎ ‎9、为什么使用多线程爬取信息比多进程有优势?‎ 答案: 由于进程与进程之间不能直接共享内存和堆栈资源,而且启动新的进程开销也比线程大得多 ‎★难度:中 参见章节:第4章 考核知识点:简单的网页爬虫方法 试题解析:‎ ‎10、请描述爬虫中的深度优先搜索过程 答案 ‎: 在一个HTML文件中,当一个超链被选择后,被链接的HTML文件将执行深度优先搜索,即在搜索其余的超链结果之前必须先完整地搜索单独的一条链。深度优先搜索沿着HTML文件上的超链走到不能再深入为止,然后返回到某一个HTML文件,再继续选择该HTML文件中的其他超链。当不再有其他超链可选择时,说明搜索已经结束。‎ ‎★难度:中 参见章节:第4章 考核知识点:简单的网页爬虫方法 试题解析:‎ ‎11、请描述爬虫中的广度优先搜索过程 答案: 整个的广度优先爬虫过程就是从一系列的种子节点开始,把这些网页中的"子节点"(也就是超链接)提取出来,放入队列中依次进行抓取。被处理过的链接需要放 入一张表(通常称为Visited表)中。每次新处理一个链接之前,需要查看这个链接是否已经存在于Visited表中。如果存在,证明链接已经处理过, 跳过,不做处理,否则进行下一步处理。‎ ‎★难度:中 参见章节:第4章 考核知识点:简单的网页爬虫方法 试题解析:‎ ‎12、MongoDB的特点 答案: MongoDB是一款基于C++开发的开源文档数据库,数据在MongoDB中以Key-Value的形式存储,就像是Python中的字典一样。‎ ‎ MongoDB 是一个基于分布式文件存储的数据库。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。‎ ‎ MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。‎ ‎★难度:易 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎13、对于MongoDB中更新操作,如何采用“批量更新方式”‎ 答案: 不要执行“更新”这个动作。把更新这个动作改为插入。这样就可以实现批量更新的效果了。具体来说,就是把数据批量插入到一个新的MongoDB集合中,再把原来的集合删除,最后将新的集合改为原来集合的名字。‎ ‎★难度:中 参见章节:第6章 考核知识点:Python与数据库 试题解析:‎ ‎14、如何在多步请求的异步加载下爬取信息?‎ 答案: 对于多次请求才能得到数据的情况,解决办法就是逐一请求,得到返回结果以后再发起下一个请求。‎ ‎★难度:中 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎15、网站是如何知道用户是通过计算机浏览器还是手机浏览器在访问页面呢 答案: 请求头Headers中一般会包含请求者所使用的浏览器信息,服务器通过此判断是手机还是计算机浏览器 ‎★难度:中 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎16、使用异步加载技术的网站,被加载的内容是不能在源代码中找到的。对于这种情况,应该如何抓取被加载的内容呢?‎ 答案: 使用Google Chrome浏览器的开发者模式。在网页上单击右键,选择“检查”命令,然后定位到“Network”选项卡,刷新网页就看到“Network”选项卡下出现的加载内容了。‎ ‎★难度:易 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎17、Selenium的主要功能 答案: 测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。‎ ‎★难度:难 参见章节:第7章 考核知识点:异步加载与请求头 试题解析:‎ ‎18、为什么web应用需要使用cookies?‎ 答案: 由于HTTP的无状态性,服务器需要借助Cookies来维护用户跟服务器会话中的状态;实现自动登录。‎ ‎★难度:难 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎19、简述session和cookies的区别。‎ 答案: Cookie通过在客户端记录信息确定用户身份,‎ Session通过在服务器端记录信息确定用户身份。‎ ‎★难度:中 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎20、HTTP状态码301和30?2有什么区别 答案: 301表示资源永久重定向;302代表的资源不是永久性移动,只是临时性性质的。‎ ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎21、使用打码平台有哪些安全注意事项?‎ 答案: 拒绝实名制;注册邮箱使用小号;注意交费地址及金额;尽量不使用百度 ‎★难度:易 参见章节:第8章 考核知识点:模拟登陆与验证码 试题解析:‎ ‎22、微信小程序爬虫相比网页有哪些优势?‎ 答案: 小程序的请求极其简单,基本上没有验证信息,即便有验证信息也非常脆弱。‎ ‎ 用Python来请求小程序的后台接口从而获取数据,比请求异步加载网页的后台接口要容易很多。在爬虫开发过程中,如果目标网站有微信小程序,那么一定要优先调查能否通过小程序的接口来抓取数据。‎ ‎ 小程序的反爬虫能力比网页版的低很多。使用小程序的接口来爬数据,能极大提高爬虫的开发效率 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎23、爬虫爬取的对象都有哪些?‎ 答案: 计算机网页。本章将会讲到手机App爬虫、微信小程序爬虫和中间人爬虫 ‎★难度:易 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎24、Charles的局限有哪些?‎ 答案: Charles只能截获HTTP和HTTPS的数据包,如果网站使用的是websocket或者是flashsocket,那么Charles就无能为力。‎ ‎ ‎ ‎ 有一些App会自带证书,使用其他证书都无法正常访问后台接口。在这种情况下,Charles自带的证书就不能正常使用,也就没有办法抓取这种App的数据。‎ ‎ 有一些App的数据经过加密,App接收到数据以后在其内部进行解密。‎ ‎ 对于这种情况,Charles只能抓取到经过加密的数据。如果无法知道数据的具体加密方法,‎ ‎★难度:中 参见章节:第9章 考核知识点:抓包与中间人爬虫 试题解析:‎ ‎25、为什么Scrapy在Windows下不支持Python3‎ 答案: 由于Scrapy所依赖的一个第三方库Twisted不支持Windows下面的Python 3,所以Scrapy在Windows下不支持Python 3。‎ ‎★难度:中 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎26、在安装Microsoft Visual C++ Build Tools时如何解决系统提示“.Net Framework没有安装或安装版本太低”的的问题 答案: 下载并安装一个要求版本或以上版本的.Net Framework ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎27、在CMD中使用哪种命令可以创建虚拟环境,从而让Virtualenv使用系统python环境的第三方库 答案: virtualenv --always-copy --system-site-packages venv ‎★难度:中 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎28、在Windows下,通过CMD创建虚拟环境后,可以使用哪种命令来激活虚拟环境?‎ 答案: venvscriptsactivate ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎29、在MacOS下安装Scrapy,当pip的网络受到干扰导致安装的速度很慢时,应该如何应对?‎ 答案: 可以使用一些代理工具来让网络变得稳定,例如ProxyChains。‎ ‎★难度:中 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎30、在执行scrapy genspider example baidu.com命令来创建爬虫时,example和baidu.com这两个参数分别代表什么含义?‎ 答案: 第1个参数“example”是爬虫的名字; ‎ ‎ 第2个参数“baidu.com”是需要爬取的网址 ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎31、Scrapy和lxml使用XPath的不同之处都有什么?‎ 答案: Scrapy与lxml使用XPath的唯一不同之处在于,Scrapy的XPath语句后面需要用.extract()这个方法。‎ ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎32、如何通过命令行启动Redis 答案: 对于Mac OS/Linux系统,直接在终端下面输入以下命令并按Enter键:‎ redis-server ‎ 在Windows系统中,通过CMD的cd命令进入存放Redis的文件夹,并运行:‎ redis-server.exe ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎33、extract_first()方法和extract()方法返回的值有怎样的区别?‎ 答案: “extract_first()”方法。“extract_first()”方法的作用是获取XPath提取出来的值中的第一个。“extract()”方法返回的是一个列表,而“extract_first()”返回的就是一个具体的值。‎ ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎34、lxml库中etree模块的etree.tostring()方法是做什么用的 答案: 把Selector对象转换为bytes型的源代码数据 ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎35、爬虫在运行时,在PyCharm的控制台中打印出以下内容:‎ Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) ,这代表了什么?‎ 答案: 意思是说爬虫什么内容都没有爬取到。‎ ‎★难度:易 参见章节:第11章 考核知识点:Scrapy框架 试题解析:‎ ‎36、中间件和中间人的异同?‎ 答案 ‎: “中间件”这个中文名字和前面章节讲到的“中间人”只有一字之差。它们做的事情确实也非常相似。中间件和中间人都能在中途劫持数据,做一些修改再把数据传递出去。不同点在于,中间件是开发者主动加进去的组件,而中间人是被动的,一般是恶意地加进去的环节。中间件主要用来辅助开发,而中间人却多被用来进行数据的窃取、伪造甚至攻击。‎ ‎★难度:中 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎37、什么是中间件?‎ 答案: 中间件是Scrapy里面的一个核心概念。使用中间件可以在爬虫的请求发起之前或者请求返回之后对数据进行定制化修改,从而开发出适应不同情况的爬虫。‎ ‎★难度:易 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎38、如何禁止中间件?‎ 答案: 在settings.py里面将这个中间件的顺序设为None ‎★难度:中 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎39、简述如何在重试中间件里面判断返回的网址 答案: 在一次请求的返回结果中判断是否被自动跳转到了异常页面,或者是否被返回了“参数错误”。如果都不是,说明这一次请求目前看起来正常,直接把response返回,交给后面的中间件来处理。 如果被重定向到了异常页面,或者被返回“参数错误”,那么进入重试的逻辑。如果返回了“参数错误”,那么直接替换原来请求的body即可重新发起请求 ‎★难度:难 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎40、简述使用中间件的好处 答案: 可以把数据爬取和其他操作分开。在爬虫的代码里面专心写数据爬取的代码;在中间件里面专心写突破反爬虫、登录、重试和渲染AJAX等操作 ‎★难度:易 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎41、使用Git来管理运行爬虫的优缺点分别是什么 答案: 好处是可以进行版本管理,不会出现代码丢失的问题。但操作步骤多,需要先在本地提交,然后登录服务器,再从服务器上面把代码下载下来。如果有很多服务器的话,每个服务器都登录并下载一遍代码是非常浪费时间的事情 ‎★难度:中 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎42、简述反向代理和正向代理的含义 答案: 所谓“反向代理”,是相对于“正向代理”而言的。前面章节所用到的代理是正向代理。正向代理帮助请求者(爬虫)隐藏身份,爬虫通过代理访问服务器,服务器只能看到代理IP,看不到爬虫;反向代理帮助服务器隐藏身份。用户只知道服务器返回的内容,但不知道也不需要知道这个内容是在哪里生成的 ‎★难度:中 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎43、简述使用scrapyd来部署爬虫的好处 答案: 使用Scrapyd来部署爬虫,可以实现远程开关爬虫和批量部署爬虫,从而实现分布式爬虫 ‎★难度:中 参见章节:第12章 考核知识点:Scrapy高级应用 试题解析:‎ ‎44、请问如果通过爬虫抓取某公司网站的公开数据,分析以后发现这个公司业绩非常好,于是首先把数据或者分析结果出售给某基金公司,然后自己再买被爬公司的股票。这样的行为是否违法,为什么?‎ 答案 ‎: 该行为涉嫌内幕交易,属于严重违法行为。之所以出售数据给基金公司以后,读者就不能在基金公司购买股票之前再购买被爬公司股票,这是由于“基金公司将要购买哪一只股票”属于内幕消息,使用内幕消息购买股票将严重损坏市场公平,因此已被定义为非法行为。而读者自身是没有办法证明自己买被爬公司的股票是基于对自己数据的信心,而不是基于知道了某基金公司将要购买该公司股票这一内幕消息的。‎ ‎★难度:难 参见章节:第13章 考核知识点:爬虫开发中的法律和道德问题 试题解析:‎ ‎(四)、解答题 ‎1.题干:请描述下面结构采用深度优先遍历搜索的顺序 难易程度:中 所属章节:4‎ 考核知识点:简单的网页爬虫方法 参考答案:1-2-5-12-13-14-6-7-3-8-9-4-10-11‎ ‎2.题干:请描述下面结构采用广度优先遍历搜索的顺序 难易程度:中 所属章节:4‎ 考核知识点:简单的网页爬虫方法 参考答案:1-2-9-12-3-7-8-10-11-13-14-4-5-6‎ (五) ‎、编程题 ‎1、题干:‎ if state == 'start':‎ ‎    code = 1‎ elif state == 'running':‎ ‎    code = 2‎ elif state == 'offline':‎ ‎    code = 3‎ elif state == 'unknown':‎ ‎    code = 4‎ else:‎ ‎    code = 5‎ 要求:上述Python代码很繁琐,请使用字典来实现多重条件控制。‎ 难易程度:中 所属章节:2‎ 考核知识点:使用字典实现多重条件控制 参考答案:‎ state_dict = {'start': 1, 'running': 2, 'offline': 3, 'unknown': 4}‎ code = state_dict.get(state, 5)‎ 2、 题干:‎ 使用Python开发一个猜数小游戏。在游戏中,程序每一轮会随机生成一个0~1024之间的数字,用户输入猜测的数字,程序告诉用户猜大了还是猜小了。在一定次数内猜对,则本轮用户获胜,否则本轮用户失败。‎ 要求:定义一个函数try_to_guess,输入name,answer,并用全局变量history记录历史。‎ 难易程度:中 所属章节:2‎ 考核知识点:Python基础知识 参考答案:‎ def try_to_guess(name, answer):‎ ‎ try_num = 0‎ ‎ while try_num < 10:‎ ‎ guess_answer = int(input('请输入一个数字: '))‎ ‎ if guess_answer < answer:‎ ‎ print('你输入的数字比正确答案小。')‎ ‎ elif guess_answer == answer:‎ ‎ print('回答正确!')‎ ‎ history[name].append('成功')‎ ‎ break ‎ else:‎ ‎ print('你输入的数字比正确答案大。')‎ ‎ try_num += 1‎ ‎ else:‎ ‎ print('猜错次数太多,失败。')‎ ‎ history[name].append('失败')‎ ‎3、题干:下面代码目的为在百度贴吧中任意寻找一个贴吧并打开一个热门帖子,将帖子的源代码复制下来,并保存为source.txt。Python 读入这个source.txt文件,通过正则表达式获取用户名、发帖内容和发帖时间,并保存为result.csv。‎ import re import csv with open('source.txt', 'r', encoding='UTF-8') as f:‎ ‎ source = f.read()‎ result_list = []‎ every_reply = re.findall('l_post l_post_bright j_l_post clearfix "(.*?)p_props_tail props_appraise_wrap', source, re.S)‎ ‎# 从每一个大文本块里面提取出各个楼层的发帖人姓名,发帖内容和发帖时间 for each in every_reply:‎ ‎ result = {}‎ ‎ result['username'] = re.findall('username="(.*?)"', each, re.S)[0]‎ ‎ result['content'] = re.findall('j_d_post_content ">(.*?)<', each, re.S)[0].replace(' ', '')‎ ‎ result['reply_time'] = re.findall('class="tail-info">(2017.*?)<', each, re.S)[0]‎ ‎ result_list.1. (result)‎ ‎2. open('tieba.csv', 'w', encoding='UTF-8') as f:‎ ‎ writer = csv.DictWriter(f, fieldnames=['username', 'content', 'reply_time'])‎ ‎ writer.writeheader()‎ ‎ writer.3. (result_list)‎ 要求:请将上述代码补充完整。‎ 难易程度:中 所属章节:2‎ 考核知识点:Python基础知识 参考答案:‎ 1. append 2. with 3. writerows 4、 题干:下面代码目的是使用3个线程计算0-9的平方。‎ from multiprocessing.dummy import 1. ‎ def calc_power2(num):‎ ‎ return num * num pool = Pool(3)‎ origin_num = [x for x in range(2. )]‎ result = pool.3. (calc_power2, origin_num)‎ print(f'计算0-9的平方分别为:{result}')‎ 要求:请将上述代码补充完整。‎ 难易程度:中 所属章节:4‎ 考核知识点:简单的网页爬虫方法 参考答案:‎ 1. Pool ‎ 2. ‎10‎ 3. Map 5、 题干:下面代码目的是使用单线程循环访问百度首页100次。‎ def query(url):‎ ‎ requests.get(url)‎ ‎ start = time.time()‎ for i in range(100):‎ ‎ query('https://baidu.com')‎ end = time.time()‎ print(f'单线程循环访问100次百度首页,耗时:{end - start}')‎ 要求:请将上述代码改写为使用5个线程进行上述操作。‎ 难易程度:中 所属章节:4‎ 考核知识点:简单的网页爬虫方法 参考答案:‎ start = time.time()‎ url_list = []‎ for i in range(100):‎ ‎ url_list.append('https://baidu.com')‎ pool = Pool(5)‎ pool.map(query, url_list)‎ end = time.time()‎ print(f'5线程访问100次百度首页,耗时:{end - start}')‎ 6、 题干:下面代码目的小说网站爬虫开发部分代码 def save(chapter, article):‎ ‎ """‎ ‎ 将每一章保存到本地。‎ ‎ :param chapter: 章节名, 第X章 ‎ :param article: 正文内容 ‎ :return: None ‎ """‎ ‎ os.1. ('动物农场', exist_ok=True) #如果没有"动物农场文件夹,就创建一个,如果有,则什么都不做"‎ ‎ with open(os.path.2. ('动物农场', chapter + '.txt'), 'w', encoding='utf-8') as f:‎ ‎ f.write(article)‎ def query_article(url):‎ ‎ """‎ ‎ 根据正文网址获取正文源代码,并调用get_article函数获得正文内容最后保存到本地。‎ ‎ :param url: 正文网址 ‎ :return: None ‎ """‎ ‎ article_html = get_source(url)‎ ‎ chapter_name, article_text = get_article(article_html)‎ ‎ save(chapter_name, article_text)‎ 要求:请将上述代码补充完整。‎ 难易程度:中 所属章节:4‎ 考核知识点:简单的网页爬虫方法 参考答案:‎ 1. makedirs 2. join 7、 题干:下面代码目的小说网站爬虫开发部分代码 start_url = 'http://www.kanunu8.com/book3/6879/‘‎ def get_source(url): ‎ ‎ """ 获取网页源代码。 ‎ ‎ :param url: 网址 ‎ ‎ :return: 网页源代码 ‎ ‎ """ ‎ ‎ html = requests.get(url) ‎ ‎ return html.content.1. ('gbk') #这个网页需要使用gbk方式解码才能让中文正常显示 from multiprocessing.2. import Pool if __name__ == '__main__':‎ ‎ toc_html = get_source(start_url)‎ ‎ toc_list = get_toc(toc_html)‎ ‎ pool = Pool(4)‎ ‎ pool.3. (query_article, toc_list)‎ 要求:请将上述代码补充完整。‎ 难易程度:中 所属章节:4‎ 考核知识点:简单的网页爬虫方法 参考答案:‎ 1. decode ‎ 2. dummy 3. map 8、 题干:下面代码目的小说网站爬虫开发部分代码 import requests import lxml.html import csv url = 'https://www.damai.cn/projectlist.do'‎ source = requests.get(url).content selector = lxml.html.1. (source)‎ item_list = selector.xpath('//ul[@id="performList"]/li')‎ item_dict_list = []‎ for item in item_list:‎ ‎ show_name = item.xpath('div[@class="ri-infos"]/h2/a/text()')‎ ‎ show_url = item.xpath('div[@class="ri-infos"]/h2/a/@href')‎ ‎ show_description = item.xpath('div[@class="ri-infos"]/p[1]/text()')‎ ‎ show_time = item.xpath('div[@class="ri-infos"]/p[@class="mt5"]/text()')‎ ‎ show_place = item.xpath('div[@class="ri-infos"]/p[@class="mt5"]/span[@class="ml20"]/a/text()')‎ ‎ show_price = item.xpath('div[@class="ri-infos"]/p/span[@class="price-sort"]/text()')‎ ‎ item_dict = {'show_name': show_name[0] if show_name else '',‎ ‎ 'show_url': 'https:' + show_url[0] if show_url else '',‎ ‎ 'show_description': show_description[0] if show_description else '',‎ ‎ 'show_time': show_time[0].strip() if show_time else '',‎ ‎ 'show_place': show_place[0] if show_place else '',‎ ‎ 'show_price': show_price[0] if show_price else ''}‎ ‎ item_dict_list.2. (item_dict)‎ with open('result.csv', 'w', encoding='utf-8') as f:‎ ‎ writer = csv.DictWriter(f, 3. =['show_name',‎ ‎ 'show_url',‎ ‎ 'show_description',‎ ‎ 'show_time',‎ ‎ 'show_place',‎ ‎ 'show_price'])‎ ‎ writer.writeheader()‎ ‎ writer.writerows(item_dict_list)‎ 要求:请将上述代码补充完整。‎ 难易程度:中 所属章节:5‎ 考核知识点:信息提取高级方法 参考答案:‎ 1. fromstring ‎ 2. append ‎ 3. fieldnames ‎9、题干:下面代码爬虫开发部分代码,目的是使用XPath获取每一章的网址,再将它们添加到Redis中。‎ import requests from lxml import html import redis client = redis.StrictRedis()‎ source = requests.get('http://dongyeguiwu.zuopinj.com/5525').1. ‎ selector = html.2. (source)‎ url_list = selector.xpath('//div[@class="book_list"]/ul/li/a/@href')‎ for url in url_list:‎ ‎ client.3. ('url_queue', url)‎ 要求:请将上述代码补充完整。‎ 难易程度:中 所属章节:6‎ 考核知识点:Python与数据库 参考答案:‎ 1. content ‎ 2. fromstring ‎ 3. lpush ‎10、题干:下面代码爬虫开发部分代码,目的是使对于爬取正文的爬虫,只要发现Redis里的url_queue这个列表不为空,就要从里面读出网址,并爬取数据。‎ import requests import pymongo import redis from lxml import html connection = pymongo.MongoClient()‎ db = connection.Chapter6‎ handler = db.white client = redis.1. ()‎ content_list = []‎ while client.llen('url_queue') > 0:‎ ‎ url = client.lpop('url_queue').decode()‎ ‎ source = requests.get(url).content ‎ selector = html.2. (source)‎ ‎ chapter_name = selector.xpath('//div[@class="h1title"]/h1/text()')[0]‎ ‎ content = selector.xpath('//div[@id="htmlContent"]/p/text()')‎ ‎ content_list.append({'title': chapter_name, 'content': 'n'.join(content)})‎ handler.3. (content_list)‎ 要求:请将上述代码补充完整。‎ 难易程度:中 所属章节:6‎ 考核知识点:Python与数据库 参考答案:‎ 1. StrictRedis ‎ 2. fromstring ‎ 3. insert ‎11、题干:下面代码爬虫开发部分代码,目的是使用正则表达式从页面中把数据提取出来,然后直接解析。‎ import json import requests import re url = 'http://exercise.kingname.info/exercise_ajax_2.html'‎ html = requests.get(url).content.1. ()‎ code_json = re.2. ("secret = '(.*?)'", html, re.S).group(1)‎ code_dict = json.3. (code_json)‎ print(code_dict['code'])‎ 要求:请将上述代码补充完整。‎ 难易程度:中 所属章节:7‎ 考核知识点:异步加载与请求头 参考答案:‎ 1. decode ‎ 2. search 3. loads ‎12、题干:下面代码为乐视网爬取视频评论部分代码,目的是使用正则表达式从页面中把数据提取出来,然后直接解析。‎ ‎ def __init__(self, url):‎ ‎ self.necessary_info = {}‎ ‎ self.url = url ‎ self.get_necessary_id()‎ ‎ self.get_comment()‎ ‎ def get_source(self, url, headers):‎ ‎ return requests.get(url, headers).content.decode()‎ ‎ def get_necessary_id(self):‎ ‎ source = self.get_source(self.url, self.HEADERS)‎ ‎ vid = re.search('vid: (d+)', source).1. (1)‎ ‎ 2. = vid ‎ def get_comment(self):‎ ‎ url = self.COMMENT_URL.format(xid=self.necessary_info['xid'])‎ ‎ source = self.get_source(url, self.HEADERS)‎ ‎ source_json = source[source.find('{"'): -1]‎ ‎ comment_dict = json.loads(3. )‎ ‎ comments = comment_dict['data']‎ ‎ for comment in comments:‎ ‎ print(f'发帖人: {comment["user"]["username"]}, 评论内容:{comment["content"]}')‎ 要求:请将上述代码补充完整。‎ 难易程度:中 所属章节:7‎ 考核知识点:异步加载与请求头 参考答案:‎ 1. group ‎ 2. self.necessary_info['xid'] ‎ 3. source_json ‎13、题干:下面代码为自动登录果壳网部分代码,目的是使用正则表达式从页面中把数据提取出来,然后直接解析。‎ def get_captcha_by_cid(cid, timeout=15):‎ ‎ while timeout > 0:‎ ‎ response = requests.get(captcha_result_url.format(cid)).text ‎ response_dict = json.loads(response)‎ ‎ print(response_dict, '——还剩:{}秒...'.format(timeout))‎ ‎ captcha = response_dict['text']‎ ‎ if response_dict['text']:‎ ‎ return captcha ‎ time.1. (1)‎ ‎ timeout -= 1‎ ‎ return ''‎ def query_captcha(filename):‎ ‎ data = {'method': 'upload', 'username': captcha_username, 'password': captcha_password, 'appid': captcha_appid,‎ ‎ 'appkey': captcha_appkey, 'codetype': captcha_codetype, 'timeout': '60'}‎ ‎ f = open(filename, 'rb')‎ ‎ file = {'file': f}‎ ‎ response = requests.2. (captcha_url, data, files=file).text ‎ f.close()‎ ‎ response_dict = json.loads(response)‎ ‎ if 'cid' not in response_dict:‎ ‎ print('请在官网上查询此错误码: {}'.format(response_dict['ret']))‎ ‎ exit()‎ ‎ captcha = response_dict['text']‎ ‎ if not 3. :‎ ‎ cid = response_dict['cid']‎ ‎ captcha = get_captcha_by_cid(cid)‎ ‎ return captcha 要求:请将上述代码补充完整。‎ 难易程度:中 所属章节:8‎ 考核知识点:模拟登陆与验证码 参考答案:‎ 1. sleep ‎ 2. post ‎ 3. captcha ‎14、题干:下面代码为自动登录果壳网部分代码,目的是使用正则表达式从页面中把数据提取出来,然后直接解析。‎ session = requests.Session()‎ ‎#直接访问登录页面,先获取必要信息:csrf_token, captcha_rand 和captcha地址 html = session.get(login_url, headers=header).content.decode()‎ csrf_token = re.findall('name="csrf_token" type="hidden" value="(.*?)">',‎ ‎ html, re.S)‎ if not csrf_token:‎ ‎ print('不能获取csrf_token, 无法登录。')‎ ‎ exit()‎ csrf_token = 1. [0]‎ captcha_rand = re.findall('id="captchaRand" value="(.*?)">', html, re.S)‎ if not captcha_rand:‎ ‎ print('不能获取captcha_rand, 无法登录。')‎ ‎ exit()‎ captcha_rand = captcha_rand[0]‎ with open('guokr.png', 'wb') as f:‎ ‎ f.write(requests.get(guokr_captcha_url.format(captcha_rand)).content)‎ captcha_solution = query_captcha('guokr.png')‎ data_guokr['captcha'] = captcha_solution data_guokr['captcha_rand'] = captcha_rand data_guokr['csrf_token'] = csrf_token result = session.post(login_url, data=data_guokr, 2. =header).content ‎#在登录成功以后,访问其他页面只需要使用session.get即可。‎ profile = session.get('http://www.guokr.com/settings/profile/', headers=header).3. ‎ print(profile.decode())‎ 要求:请将上述代码补充完整。‎ 难易程度:中 所属章节:8‎ 考核知识点:模拟登陆与验证码 参考答案:‎ 1. csrf_token ‎ 2. headers 3. content ‎15、题干:下面代码是多设备群控应用,目的为主线程中调用子线程。‎ for serial in serial_list:‎ ‎ phone_thread = PhoneThread(serial)‎ ‎ phone_thread.1. ()‎ ‎ phone_list.2. (phone_thread)‎ while phone_list:‎ ‎ phone_list = [x for x in phone_list if x.3. ()]‎ ‎ time.sleep(5)‎ 要求:请将上述代码补充完整。‎ 难易程度:难 所属章节:10‎ 考核知识点:Android原生App爬虫 参考答案:‎ 1. Start 1. append ‎ 2. is_alive ‎16、题干:下面代码是BOSS直聘爬虫代码。‎ from uiautomator import Device device = Device()‎ resource_id_dict = {‎ ‎ 'salary': 'com.hpbr.bosszhipin:id/tv_position_salary',‎ ‎ 'company': 'com.hpbr.bosszhipin:id/tv_company_name',‎ ‎ 'address': 'com.hpbr.bosszhipin:id/tv_location',‎ ‎ 'experence': 'com.hpbr.bosszhipin:id/tv_work_exp',‎ ‎ 'degree': 'com.hpbr.bosszhipin:id/tv_degree'}‎ def crawl():‎ ‎ for job in device(resourceId='com.hpbr.bosszhipin:id/rl_section_1'):‎ ‎ result_dict = {}‎ ‎ job_info_box = job.child(resourceId='com.hpbr.bosszhipin:id/ll_position')‎ ‎ job_name = job_info_box.child(resourceId='com.hpbr.bosszhipin:id/tv_position_name')‎ ‎ if not job_name.1. :‎ ‎ return ‎ result_dict['job_name'] = job_name.text ‎ for key, resource_id in resource_id_dict.2. ():‎ ‎ value = job.child(resourceId=resource_id)‎ ‎ if not value.exists:‎ ‎ return ‎ result_dict[key] = value.text ‎ print(result_dict)‎ def scroll():‎ ‎ device(scrollable=3. ).scroll.vert.forward()‎ if __name__ == '__main__':‎ ‎ while True:‎ ‎ crawl()‎ ‎ scroll()‎ 要求:请将上述代码补充完整。‎ 难易程度:难 所属章节:10‎ 考核知识点:Android原生App爬虫 参考答案:‎ 1. exists ‎ 2. items 3. ‎ True 17、 题干:下面代码是博客爬虫。‎ import scrapy from scrapy_redis.spiders import RedisSpider from baidu.items import BlogItem from lxml import etree from html import unescape class BlogSpider(RedisSpider):‎ ‎ name = "BlogSpider"‎ ‎ allowed_domains = ["www.kingname.info"]‎ ‎ redis_key = 'blogspider'‎ ‎ start_urls = ['https://www.kingname.info/archives/']‎ ‎ host = 'https://www.kingname.info'‎ ‎ def parse(self, response):‎ ‎ title_tag_list = response.xpath('//a[@class="post-title-link"]')‎ ‎ for title_tag in title_tag_list:‎ ‎ article_title = title_tag.xpath('span/text()').1. ()‎ ‎ article_url = self.host + title_tag.xpath('@href').extract_first()‎ ‎ item = BlogItem()‎ ‎ item['title'] = article_title ‎ item['url'] = article_url ‎ yield scrapy.Request(article_url,‎ ‎ headers=self.2. ['HEADERS'],‎ ‎ callback=self.parse_detail,‎ ‎ meta={'item': item})‎ ‎ def parse_detail(self, response):‎ ‎ item = response.3. ['item']‎ ‎ post_time = response.xpath('//time[@title="Post created"]/@datetime').extract_first()‎ ‎ category = response.xpath('//span[@itemprop="about"]/a/span/text()').extract_first()‎ ‎ post_body = response.xpath('//div[@class="post-body"]')‎ ‎ body_html = unescape(etree.tostring(post_body[0]._root).decode())‎ ‎ item['post_time'] = post_time ‎ item['category'] = category ‎ item['detail'] = body_html ‎ yield item 要求:请将上述代码补充完整。‎ 难易程度:难 所属章节:11‎ 考核知识点:Scrapy框架 参考答案:‎ 1. extract_first ‎ 2. settings ‎ 3. meta ‎18、题干:下面代码是重试中间件。‎ class RetryOfDateMiddleware(RetryMiddleware):‎ ‎ def __init__(self, settings):‎ ‎1. .__init__(self, settings)‎ ‎ def process_exception(self, request, exception, spider):‎ ‎ if spider.name == 'exceptionSpider' and isinstance(exception, TCPTimedOutError):‎ ‎ self.remove_borken_proxy(request.meta['proxy'])‎ ‎ return request.copy()‎ ‎ def remove_borken_proxy(self, proxy):‎ ‎ """‎ ‎ 在这里写代码,从数据库或者是Redis中,把无效的代理剔除掉 ‎ :param proxy:‎ ‎ :return:‎ ‎ """‎ ‎ pass ‎ def process_response(self, request, response, spider):‎ ‎ if 2. .name == 'middlewareSpider':‎ ‎ return_str = response.body.decode()‎ ‎ if '404.html' not in str(response.url) and '参数错误' not in return_str:‎ ‎ return response ‎ yesterday = str(datetime.date.today() - datetime.timedelta(days=1))‎ ‎ if '404.html' in str(response.url):‎ ‎ origin_url = request.meta['redirect_urls'][0]‎ ‎ next_request = request.replace(url=origin_url,‎ ‎ method='POST',‎ ‎ body=json.dumps({'date': yesterday}),‎ ‎ headers={'Content-Type': 'application/json'})‎ ‎ else:‎ ‎ next_request = request.replace(body=json.3. ({'date': yesterday}))‎ ‎ return next_request ‎ return response 要求:请将上述代码补充完整。‎ 难易程度:难 所属章节:12‎ 考核知识点:Scrapy高级应用 参考答案:‎ 1. RetryMiddleware ‎ 2. spider ‎ 3. dumps