赞
踩
第一章
网络爬虫又称网页蜘蛛或 ( 网络机器人 )
网络爬虫能够按照一定的( 规则 ),自动请求万维网站并提取网络数据
爬虫是手动请求万维网网站且提取网页数据的程序。(×)
爬虫爬取的是网站后台的数据。(×)
通用爬虫用于将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。(√)
简答题:
简述通用爬虫和聚焦爬虫。
1.通用爬虫又称全网爬虫,主要用于将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。聚焦网络爬虫又称主题网络爬虫,用于选择性地爬取那些与预先定义好的主题相关的页面。
2.通用爬虫的爬行范围和数量巨大,对于爬行速度和存储空间要求较高,对于爬行页面的顺序要求相对较低。聚焦爬虫只需要爬行与主题相关的页面,极大地节省了硬件和网络资源,保存的页面也由于数量少而更新快,还可以很好地满足一些特定人群对特定领域信息的需求。
第二章
( robots.txt )文件是搜索引擎访问网站是要查看的第一个文件。
robots.txt文件没有实际的约束力。(√)
爬虫爬取网页的行为都很正当,不会受到网站的任何限制。(×)
针对采用了防爬虫措施的网站,爬虫是无计可施的。(×)
简答题
简述通用爬虫和聚焦爬虫爬取网页的流程。
通用爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。
聚焦爬虫需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接,并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。
请举出一些针对防爬虫的应对策略。
伪装User-agent、使用代理IP、降低访问频率、识别验证码
第三章
下列状态码中,表示客户端的请求有错误的是( C )。
A、200
B、304
C、403
D、500
下列请求报头中,可以记载用户信息实现模拟登录的是( B )。
A、User-Agent
B、Cookie
C、Connection
D、Host
客户端发送的请求消息由请求行、( 请求头部 )、空行以及请求数据4部分组成。
一旦服务器端出现错误,返回的状态码为403。(×)
GET请求是指向指定资源提交数据进行处理请求,数据被包含在请求体中。(×)
服务器可以根据请求报头中的Accept进行判断,以返回适当的文件格式给浏览器。(√)
简答题
简述浏览器加载网页的过程
HTTP通信由哪些部分组成
客户端请求消息和服务器端响应消息
第四章
使用urlopen()方法发送请求后,服务器后返回一个( A )类型的对象。
A、HTTPResponse
B、ResponseHTTP
C、Response
D、ServiceResponse
下列方法中,用于对传递的URL进行编码和解码的是( D )
A、urldecode, urlencode
B、unquote, urlencode
C、urlencode, urldecode
D、urlencode, unquote
通过加入特定的( C ),可以将爬虫发出的请求伪装成浏览器。
A、Request
B、opener
C、Headers
D、User_Agent
若客户端没有连接到服务器,则使用urlopen()方法发送请求后会产生( URLError )异常。
( urllib )是Python内置的HTTP请求库,可以看作处理URL的组件集合。
如果要获取Response类中字符串形式的响应内容,可以访问( text )属性获取。
登录网站时,只有浏览器发送的请求才能获得响应内容。(√)
如果访问某网站的频率太高,则这个网站可能会禁止访问。(√)
urlopen()是一个特殊的opener,支持设置代理IP。(×)
简答题
简述urllib和requests的异同
相同点:它们都是Python提供的HTTP请求库,能够通过获取服务器中网页源码
不同点:urllib是Python内置的HTTP请求库,导入后方可使用;requests是Python提供的第三方库,需要额外进行安装。Requests是在urllib的基础上进行了高度的封装,它不仅继承了urllib的所有特性,而且还支持一些其他的特性
第五章
下列选项中,属于结构化数据的是( D )
A、图像
B、文本
C、办公文档
D、JSON
下列解析技术中,用于解析JSON文档的是( B )
A、XPath
B、JSONPath
C、Beautiful Soap
D、正则表达式
下列Python库或模块中,支持正则表达式语法的是( C )。
A、bs4
B、lxml
C、re
D、Json
下列选取节点的表达式中,代表着从根节点开始选取的是( A )。
A、/
B、//
C、name
D、@
( 正则表达式 )是一个用于处理字符串的强大工具。
( XPath )表示XML路径语言,能够确定XML树结构中某一部分的位置。
路径表达式是指从某节点到某个节点或某一组节点的顺序,以( / )字符进行分隔。
如果路径表达式以“/"开始,那么该路径就代表着到达某个节点的绝对路径。(√)
创建BeautifulSoup类实例时,如果没有明确指定解析器,那么该实例肯定会选择Python标准库。(×)
在使用bs4库调用find()方法查找节点时,只能将字符串作为参数。(×)
JSONPath是一种信息抽取类库,用于从JSON文档中抽取指定信息。(√)
路径表达式是唯一的,只能从根节点开始搜索。(×)
简答题
简述什么是结构化数据和非结构化数据
非结构化数据是指数据结构不规则或不完整,没有预定义的数据模型,不
方便使用数据库二维逻辑来表现的数据,包括所有格式的办公文档、文本、图
像等。
结构化数据又称作行数据,是由二维表结构来逻辑表达和实现的数据,严
格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理,包括
HTML、XML和 JSON。
正则表达式、xpath、Beautiful Soup 和 JSONPath 有什么区别
正则表达式是基于文本的特征来匹配或查找指定的数据,它可以处理任何
格式的字符串文档,类似于模糊匹配的效果。
XPath和 Beautiful Soup是基于 HTML/XML文档的层次结构来确定到达指
定节点的路径,所以它们更适合处理层级比较明显的数据。
JSONPath是一种信息抽取类库,是从JSON文档中抽取指定信息的工具。
第六章
下列选项中,表示先进先出队列的类是( A )。
A、Queue
B、LifoQueue
C、PriorityQueue
D、EmptyQueue
下列方法中,用于阻塞当前线程的是( A )。
A、join()
B、put()
C、qsize()
D、get()
如果从空队列中取数据,则会抛出( B )异常。
A、Full
B、Empty
C、Used
D、Half
LifeQueue类表示 ( 后进先出 )队列,代表后进入的元素先出来。
优先级队列会按照级别顺序取出元素,级别最( 低 )是最先出来。
( Queue )类提供了一个适用于多线程编程的先进先出的数据结构,用于生产者和消费者线程之间的信息传递。
多线程要想同时爬取网页,需要准备一个待爬取网址列表。(√)
启动线程爬取网页,线程的数量越多越好。(×)
协程无须通过操作系统调度,没有线程之间的切换和创建等开销。(√)
第七章
如果需要在页面上模拟一些鼠标操作,可以通过使用( B )类来实现。
A、WebDriver
B、ActionChains
C、Select
D、Ajax
下列选项中,关于页面等待描述错误的是( B )。
A、如果实际页面响应时间过长,那么某个元素被代码引用后可能会抛出NullPointer异常
B、显式等待就是设置一个全局的最大等待时间
C、显式等待是指定某一条件,直到这个条件成立后才继续执行
D、隐式等待就是等待特定的时间
阅读下面一段示例程序:
for handle in driver.window_handles:
driver.switch_to_window(handle)
上述程序可以用作( C )操作
A、填充表单
B、弹窗处理
C、页面切换
D、获取页面的Cookie
使用了JavaScript脚本的网页,能够在( URL )不变的情况下改变网页的内容。
( Selenium )是一个Web的自动化测试工具,可以按指定的命令自动操作。
selenium库的( WebDriver )有点儿像加载网站的浏览器,它不仅可以查找页面元素,而且可以与页面上的元素进行交互。
若提交表单后,网站的页面不需要重新刷新,则当前访问的网站用的是AJAX技术。(√)
selenium支持浏览器的功能,可以直接被用来执行指令。(×)
通过driver的get()方法可以将页面的内容加载到浏览器对象中,如果页面还没有加载完,此方法会一直阻塞等待。(√)
简答题
什么是动态网页
动态网页是指在网页中依赖JavaScript脚本动态加载数据的网页。与传统单页面表单事件不同,使用了JavaScript脚本的网页能够在URL不变的情况下改变网页的内容。
简诉什么是显示等待和隐式等待
Selenium供种等待方式,一种隐式等,一种显式等待。隐式等待是等待特定的时间,显式等待是指定某一条件,直到这个条件成立后才继续执行。
第十章
下列框架组件中,用于从响应中提取Item数据和URL的是( C )。
A、Scheduler
B、Downloader
C、Spiders
D、Item Pipeline
下列文件中,用于存储Scrapy项目设置信息( A )
A、settings.py
B、scrapy.cfg
C、pipelines.py
D、items.py
在scrapy.Item的子集中,可以添加( C )类型的属性来表示爬虫项目的实体数据。
A、scrapy.Item
B、scrapy.Spider
C、scrapy.Field
D、scrapy.Pipeline
下列命令中,用于运行爬虫的是( C )。
A、scrapy startproject mySpider
B、scrapy genspider itcast "itcast.cn"
C、scrapy crawl itcast
D、scrapy crawl itcast -o teachers.json
一个Scrapy项目中可以有多个爬虫,每个爬虫在执行时可以按照( B )属性来区分。
A、allowed_domains
B、name
C、start_urls
D、parse
Scrapy使用( Item )来表示要爬取的数据。
( scrapy.Spider )是Scrapy提供的爬虫基类,创建的爬虫类需要从该类该类继承。
如果要创建一个爬虫文件,只能通过使用命令的方式来完成。(×)
Scrapy爬虫文件中,需要使用start_urls属性确定爬取的起始URL元组或列表。(√)
如果Scrapy爬虫文件中规定了爬虫的约束区域,那么不在这个区域的URL会被忽略。(√)
简答题
什么是Scrapy
Scrapy是一个适用爬取网站数据、提取结构性数据的应用程序框架,它可以应用在广泛领域:Scrapy 常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
简单描述一下scrapy框架的运作流程
(1)引擎向Spiders请求第个要爬取的URL(s)。
(2)引擎从Spiders中获取到第一个要爬取的URL,封装成Request并交给调度器。
(3)引擎向调度器请求下一个要爬取的Request。
(4)调度器返回下一个要爬取的Request给引擎,引擎将Request 通过下载中间件转发给下载器。
(5)一旦页面下载完毕,下载器生成一个该页面的Response,并将其通过下载中间件发送给引擎。
(6)引擎从下载器中接收到Response并通过Spider中间件发送给Spider处理。
(7)Spider处理Response并返回爬取到的Item及新的Request给引擎。
(8)引擎将爬取到的Item给Item Pipeline,将Request给调度器。
(9)从第(2)步开始重复,直到调度器中没有更多的Request。
第十一章
关于Scrapy终端的说法中,正确的是( B )
A、Scrapy shell是一个非交互式终端
B、在不启动爬虫的情况下,可以使用Scrapy shell调度爬取代码
C、Scrapy shell可以用来测试正则表达式或CSS表达式
D、Python终端和IPython共享的情况下,Scrapy shell会优先选择标准的Python终端
下列关于Spiders爬取循环的描述中,错误的是( A )
A、当下载完毕返回时会生成一个Response,它会作为回调函数的返回值
B、如果回调函数返回一个Request,则该对象会经过Scrapy处理,下载相应的内容,并调用设置的回调函数
C、在回调函数中,可以使用解析器来分析网页内容,并根据分析的数据生成Item
D、Spider返回的item将被存到数据库或文件中
下列选项中,包含了爬虫允许爬取的域名列表的是( D )
A、parse
B、name
C、start_urls
D、allowed_domains
请阅读下列一个ITEM_PIPELINES配置项的样例:
ITEM_PIPELINES={
'mySpider.pipelines.DemoPipeline': 300,
'mySpider.pipelines.DemoJsonPipeline': 500,
'mySpider.pipelines.DemoCSVPipeline': 700,
'mySpider.pipelines.DemoMongoPipeline': 900,
}
上述示例中,( D )管道会优先执行?
A、DemoMongoPipeline
B、DemoCSVPipeline
C、DemoJsonPipeline
D、DemoPipeline
下列设置项中,能够控制爬取网站使用的用户代理的是( C )
A、PROXIES
B、ITEM_PIPELINES
C、USER_AGENT
D、COOKIES_ENABLED
Scrapy框架提供( scrapy.Spider )作为爬虫的基类,所有自定义的爬虫必须从这个类派生。
若ITEM_PIPELINES设置项的数值越大,则优先级越高(×)
第四章的编程题
#导入requests库
import requests
#请求的URL路径和查询参数
url="http://www.baidu.com/s" param={"wd":"传智播客"}#请求报头
headers={"User-Agent":"…"}
#发送GET请求,返回一个响应对象
response =quests.get(url, params-param, headers-headers)
#查看响应的内容
print(response.text)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。