《Python爬虫大数据采集与挖掘》期末考试考题汇总带答案

  • Post author:
  • Post category:python




一、填空题



1、爬虫技术的应用可以分为两大类:



采集型爬虫







监测型爬虫





2、根据 Web


页面组成结构中的信息内容的生成方式不同,可以将


Web


页面分为



静态页面







动态页面



、以及



伪静态页面



三大类。


3、



Robots 协议



为了给


Web


网站提供灵活的控制方式来决定页面是否能够被爬虫采集。


4、在浏览器中打开网站后,在网站首页的地址后面添加“



/robots.txt



”,如果网站设置了访问许可,按回车就可以看到网站的 robots


协议,即


robots.txt


文件内容。


5、


Web


信息提取包含



Web 页面中的超链接提取







Web 内容提取



两大部分。


6、Web


页面它具有一定的结构,即



由 HTML 标签构成的树型结构





7、目前有多种


HTML


解析器的开源框架如


BeautifulSoup


等,大都集成了



DOM 树



的解析。


8、


HTTP


状态码(


HTTP Status Code


)是用来表示网页服务器


HTTP


响应状态的



3 位数字



代码。 状态码包含了



五种



类别,即



消息







成功







重定向







请求错误







服务器错误





9、用于


re.findall


函数中的



http://[a-zA-Z0-9/\.-]*





表达式用于提取


http://


开始的超链接。


10、


Tag


标签为


a


时属性为



href






Tag


标签为资源名称时,例如


img





audio


,属性为



scr





11、互联网上的


Web


页面可以抽象化为一张有向图。



图的遍历



就是用来解决节点的访问顺序问题。图的遍历算法有两种,即



深度优先算法 DFS







宽度优先算法 BFS





12、宽度优先的策略使用



队列



作为存储结构。深度优先的策略,需要采用



堆栈



作为存储结构。


13、按照链接的形式不同,可以分为



绝对链接







相对链接







书签





14、按照链接的路径指向不同,可以分为



内部链接







锚点链接







外部链接





15、按照超链接指向的资源不同,分为



Web 页面超链接







图片超链接







视频超链接



等。


16、按照链接的存在方式不同,分为



动态超链接







静态超链接





17、关于如何进行节点的定位,


lxml


提供了两种方式:



xpath







树的遍历函数





18、在爬虫中实现基于


Cookie


的动态交互过程可分为两个环节



Cookie 的获得或构造







将Cookie 传递到服务器





19、一般情况下


ajax


返回的数据是以



json



形式封装的。


20、


DNS


缓存用于



减小域名到 IP 地址的映射





21、


PageRank


算法是一种根据



网页之间相互的超链接



计算页面级别的方法。在



计算 Web 页面的重要性







社交网络中的重要人物识别







文本中的关键词提取



方面有重要应用。


22、动态页面的交互是指



浏览器和 web 服务器之间的命令参数传递方式



。按照命令参数的不同提供方式,主要有



用户提供







cookie 提供



两种方式。


23、


URL


的发送有通过



ajax 引擎







非 ajax 引擎



两种。


24、数据的规范化程度比


OLTP


中的数据要









25、标准


ASCII


码使用



七位二进制编码



表示,编码范围为



0~127





26、



re 模块



提供了正则表达式匹配所需要的功能。匹配和搜索、分割字符串、匹配和替换最常用的函数是



findall



。函数返回结果为一个



列表





27、



404



代表“


NOT FOUND


”,认为网页已经失效;



503



代表“


Service Unavailable


”,认为网页临时不可访问;



403



代表“


Forbidden


”,认为网页目前禁止访问;



301



代表是“


Moved Permanently”,认为网页重定向至新


url




28、


Web


信息提取的三种基本思路是:



基于字符串匹配的 Web 信息提取方法







基于 HTML结构的 Web 信息提取方法







基于统计的 Web 信息提取方法





29、


Cooike






客户端



的,数据保存在



客户端






Session






服务器端



的,数据保存在



服务器





30、


python3


的默认编码是



unicode



,


可通过



encode







decode



来进行转换 。


31、主题爬虫的应用场景主要有以下三大类:



垂直搜索引擎







舆情监测







商业情报搜索





32


、主题爬虫在普通爬虫的基础上增加了



主题定义







链接相关度估算







内容相关度计算



三大技术实现。


33、



On-Line Transaction Processing 联机事务处理过程(OLTP)



,也称为面向交易的处理过程,其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果,是对用户操作快速响应的方式之一。


34、


html


标签很多,从闭合的角度可以分为



闭合标签







空标签





35、


html


标签还可以按照在文档中的位置特性进行分类,主要分为



块级标签







行内(内嵌)标签







行内-块级(内嵌-块级)标签





36、解释


Cookie


规范


:



某些网站为了辨别用户身份,进行 session 跟踪而储存在用户本地设备上的数据





37、解释


Robots


协议:



网络爬虫排除协议





38、


HTTP


报文中存在着多行的内容,一般是由



ASCII 码串



组成,各字段长度是不确定的。


39、


HTTP


报文可分为两种:



请求报文(客户端 → 服务器端)







响应报文(服务器端→客户端)





40、协议


: //


域名部分


:


端口号


/


目录


/


文件名


.


文件后缀


?


参数


1=





#


标志


&


参数


2=





#


标志

? 表示



第一个参数的开始,起到分隔的作用





参数的基本形式是”



参数=值



”,不同参数之间用



&





连接起来。

# 标志表示



书签



,用于



访问一个 Web 页面中的特定部分





41、


Web


服务器端会对文件进行读取和解析,把文件中包含的



SSI 指令



解释出来,最终生成



HTML 文档



推送给客户端。与内容生成有关的常见指令是



include





42、


HTTP


响应报文与请求报文由



起始行







头部(headers)



以及



实体(entity-body)



构成。


43、


HTTP


请求报文起始行



<method> <request-URL> <version>






HTTP


响应报文起始行



<method> <status> <reason-phrase>





44、



Ajax



是一种基于


javascript


并整合


XHTML/ XML/DOM


等技术实现的客户端


/


服务器端动态页面编程框架。通常用于在后台与服务器进行少量数据交换,在不重新加载整个网页的情况下,对网页的局部进行更新。


45、


Ajax


触发条件:



页面中的定时器







鼠标或键盘事件驱动





46、目前主题爬虫主要用到的方法:



采用关键词集来描述一个主题







对关键词集进行某种划分,通过对子主题的描述来实现对整个主题的定义





47、以爬虫自动登陆邮箱,查看有没有新邮件为例。为达到目的,需要经过



安装配置







页面结构分析







程序实现



三个步骤。


48、页面可以通过



POST







GET



方式来向服务器发送请求的动态参数。


49、模拟浏览器有三种实现方式:



以模拟特定浏览器的 header 信息方式实现对浏览器的模拟







使用浏览器内核(例如 webkit)







直接在浏览器上开发组件(firefox/chrome)以实现动态页面的采集





50、当页面


JS


脚本比较复杂、


AJAX


交互较多或存在不同页面之间大量数据交换的情况下,使用



浏览器组件



来模拟浏览器进行页面内容采集就是比较合适的选择了。


51、在主题爬虫中,相关度的计算包含了



链接相关度







内容相关度



计算两大部分。在整个主题爬虫的处理流程中起到的作用各不相同。但是,不管是哪一个,都可以归结为



一个文本与主题模型的相似度



计算问题。


52、网络连接层由



TCP Socket



连接的建立、数据传输以及连接管理组成 。


53、页面采集层用于对



URL



的处理。



二、判断题



1、问号并不作为通配符。(√)


2、


HTTP/1.1


默认采用持久连接。(√)


3、


Cookie


存储了客户端的一些重要信息,例如身份标识、所在地区等,通常是一个文本文件。在向服务器发送 URL


请求时,可以将文件内容读出,附加在


HTTP


的请求头中,可以免去用户输入信息的麻烦。(√)



三、简答题




1




、大数据特征的三种观点


4V:


Volume





Variety





Value





Velocity(


速度


) ;

5V:


Volume





Velocity





Variety





Veracity


(准确性)、


Variability


(变化性) ;

7V:Volume





Velocity





Vast


(巨大的)、


Variety





Veracity





Value





Visualize 。



2




、互联网大数据的特征


大数据类型和语义更加丰富

数据的规范化程度比 OLTP


中的数据要弱

数据的流动性更大

数据的开放性更好

数据的来源更加丰富

互联网大数据的价值体现形式更加多样化



3




、监测型爬虫的典型使用场景


应用安全监测:应用层安全是网络信息安全的重要问题之一。

网页挂马

SQL 注入



内容安全监测:网络信息安全的最高层次。

敏感信息

泄密信息



4




、获取




URL




方法


①如果 JS


是定时重复执行的,可以结合页面数据的更新情况寻找对应的


JS


,单击之后,即可看到关于该 JS


发送


URL


的请求头和响应信息,如下页图所示


.


图中


request URL


对应的值即为请求数据的 URL




②进入开发者模式之后,通过鼠标点击操作,可以在评论信息页面检查对应的请求过程。通过 network


下的


XHR


选项可以在请求头的


refer


属性中找到评论的


URL





5




、什么是




HTTP?




什么是




session




?什么是




cookie









session









cookie




有什么区别?


HTTP 是一种无状态协议


,


服务器没有办法单单从网络连接上面知道访问者的身份


,


为了解决这个问题,


就诞生了


Cookie




Cookie 实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用 response


向客户端浏览器颁发一个


Cookie


。客户端浏览器会把


Cookie


保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该 Cookie


一同提交给服务器。服务器


检查该


Cookie


,以此来辨认用户状态。服务器还可以根据需要修改


Cookie


的内容。实际就是颁发一个通行证,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是 Cookie


的工作原理


cookie


可以让服务端程序跟踪每个客户端的访问,但是每次客户端的访问都必须传回这些 Cookie


,如果


Cookie


很多,这无形地增加了客户端与服务端的数据传输量,而 Session


的出现正是为了解决这个问题。同一个客户端每次和服务端交互时,不需要每次都传回所有的 Cookie


值,而是只要传回一个


ID


,这个


ID


是客户端第一次访问服务器的时候生成的, 而且每个客户端是唯一的。这样每个客户端就有了一个唯一的 ID,客户端只要传回这个 ID


就行了,这个


ID


通常是


NANE





JSESIONID


的一个


Cookie




cookie 和


session


的区别 :

具体来说 cookie


机制采用的是在客户端保持状态的方案,而


session


机制采用的是在服务器端保持状态的方案。同时我们也看到, 由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以 session


机制可能需要借助于


cookie


机制来达到保存标识的目的cookie 不是很安全,别人可以分析存放在本地的


cookie


并进行


cookie


欺骗,考虑到安全应当使用 session

session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用 cookie单个 cookie


保存的数据不能超过


4k,


很多浏览器都限制一个站点最多保存


20





cookie


。 可以将登陆信息等重要信息存放为 session




实现 Session


机制:在抓取页面时,如果涉及动态页面,可能需要考虑在爬虫中实现 session 机制。

Cookie 处理:最终的


URL


命令结果是通过


HTTP


协议数据包发送的,在头部信息中可以携带 cookie


信息。



6









Cookie









Session




(书中给出的




的答案)


Cookie 是由服务端生成,并在客户端进行保存和读取的一种信息,


Cookie


通常以文件形式保存在用户端。查看 Cookie


的方法,随浏览器不同而不同。Session 是另一种常见的在客户端与服务器之间保持状态的机制,在一定程度上解决或缓解了上述问题,准确理解其技术原理有利于设计更好的动态爬虫。Session 可以看作是


Web


服务器上的一个内存块,可以将原本保存在


Cookie


中的用户信息存储在该内存块中。而客户端和服务器之间则依靠一个全局唯一标识 Session_id


来访问Session 中的用户数据,这样只需要在


Cookie


中保存


Session_id


就可以实现不同页面之间的数据共享。可见,在 Session


机制下,除了


Session_id


外,其他用户信息并不保存到


Cookie 文件中,从而解决了上述两个问题。



7




、四种典型的应用架构


Client/Server:客户端可以是各种浏览器,也可以是爬虫程序。

Client/Server/Database:在网络爬虫技术中,这种架构支持了动态网页的实现

Web 服务器集群:针对大量用户并发访问的应用,可保障用户访问的体验度和容错性,web 服务器通常需要进行高可用和负载均衡设计。

虚拟主机架构:虚拟主机是另一种常见的 Web


应用架构,它是指在一台服务器里配置多个网站,使得每个网站看起来具有独立的物理计算机。虚拟主机的实现方法有三种:(1


)基于 IP


地址的方法、基于端口的方法、基于主机名的方法。



8




、普通爬虫的爬虫流程


具体的爬虫流程:

(1





Web


服务器连接器向指定的


Web


服务器发起连接请求,再建立爬虫和


Web


服务器之间的网络连接。该连接就作为后续发送 URL


和接收服务器返回信息的通路,直到爬虫或服务器断开该连接。在连接的过程中,为了减小域名到 IP


地址的映射时间消耗,爬虫端需要使用 DNS


缓存。

(2


)在该连接上向


Web


服务器发送


URL


页面请求命令,并等待


Web


服务器的响应。对于一个新的网站,在发送 URL


请求之前,应当检查其根目录下是否有


Robots.txt


文件。如果有,则应当对该文件进行解析,建立服务器访问要求和 URL


许可列表。同时需要处理各种可能的网络异常、各种可能 Web


服务器异常,例如


HTTP404


错误等。当


web


服务器反馈页面内容即可保存页面信息,并将 HTML


编码的文本信息送给下一个处理步骤。

(3


)对获取到的


HTML


文件进行


URL


提取和过滤,由页面解析器对


HTML


文本进行分析,提取其中的所包含的 URL


。进一步,根据


Robots.txt


的访问许可列表、是否已经爬行过等基本规则对提取出来的 URL


进行过滤,以排除掉一些不需要获取的页面。

(4


)根据一定的爬行策略,将每个


URL


放入到


URL


任务中的适当位置。先后次序很重要,需要考虑 web


服务器在访问频率、时间等方面的要求及连接建立的时间消耗等问题。

(5


)当某个


URL


对应的页面爬行完毕后,


Web


服务器连接器从


URL


爬行任务获得新的URL,上述过程不断地重复进行,直到爬行任务为空,或者用户中断为止。



9




、动态页面内容生成方式


动态页面区别于静态页面的最主要特征是页面内容的生成方式,动态页面的内容生成方式可以分成两类,即服务端生成、客户端生成。

服务器生成:这种内容生成方式中,页面的主要内容的结构和表现方式一般是分离的。页面主要内容可以存储在各种数据库系统中,而决定结构和表现方式的 HTML


标签和语句则是存储在 web


服务器上,因此在应用架构上采用的是


client/server/database


模式。

客户端生成:根据这种内容生成方式,内容是在客户端上生成,而客户端主要是浏览器。受限于浏览器的能力,客户端生成的内容一般是轻量级的、局部的,例如给用户提示警告信息、显示定时时间等。在这种生成方式中,Web


页面中需要嵌入一定脚本或插件。通过在浏览器内执行这些脚本或插件功能,实现 Web


页面内容的生成,并进行动态更新。



10




、动态网页采集技术类型


动态网页主要的采集技术可以归纳为以下四种类型。

(1


)构造带参数的


URL


,利用参数传递动态请求;

(2


)构造


Cookie


携带参数,利用


HTTP


头部传递动态请求的参数;

(3


)离线分析


Ajax


的动态请求,使用静态页面采集技术,或者通过


Cookie





Post


等形式发送请求参数;(使用最广泛)

(4


)模拟浏览器技术。



11









Web




服务器连接器模块主要功能的实现,可以用如下的流程来描述。


输入:URL


,形式为: http(https)://域名部分


:


端口号


/


目录


/


文件名


.


文件后缀,或 http(https)://域名部分


:


端口号


/


目录


/  其中,目录可以包含多层子目录。

处理过程:

(1


) 从


URL


中提取域名和端口号,如果端口号为空,则设置为默认的端口号,即


80




(2


) 以域名和端口号为参数,创建


Socket


连接;

(3


) 连接建立后,检查服务器的根目录是否存在


robots.txt


文件;

(4


) 如果存在则解析


robots.txt


文件,生成许可列表和服务器对访问要求的参量;

(5


) 根据许可列表和访问时间限定,如果允许的话,则向服务器发送


URL


请求;

(6


) 等待服务器响应;

(7


) 进行异常处理,针对各种已知的


HTTP


标准错误代码,做好预案;

(8


) 接收服务器返回的数据,把数据保存到文件中;

(9


) 断开网络连接。

输出:页面的 HTML


文件



12




、是否可以将自己的爬虫的




User-agent




设置为知名爬虫呢




?


从代码的角度看,没有人会限制你使用什么样的 User-agent


,就是上面的例子。实际上,不断变换 User-agent


的值也是很多不友好爬虫为了躲避服务器的检测的常用做法。但是这种做法是非常不可取的,它扰乱了 Web


服务器的正常判断,就可能使得某种知名爬虫被检测出来不遵守 Robots


协议而产生纠纷。



13




、基于统计的




Web




内容抽取方法 其基本步骤如下:


构建 HTML


文档对应的


DOM


树;

基于某种特征来构建基于 DOM


树的信息提取规则;

按照规则,从 HTML


中提取信息。



14




、基于结构的方法基本思路描述如下:


(1


)通过


HTML


解析器将


Web


文档解析成


DOM


树;

(2


) 确定要提取的正文在


DOM


树中的哪个节点下,并且节点名称和属性具有惟一性;

(3


)通过各种方法定位到该节点,将节点中所包含的内容提取出来。



15









PR




算法的收敛性证明是基于




Markov




链,要求它的状态转移矩阵




A




需要满足三个条件:


(1





A


为随机矩阵:


A


矩阵所有元素都大于等于


0


,并且每一列的元素和都为


1


,满足概率定义。

(2





A


是不可约的:


A


是不可约的当且仅当与


A


对应的有向图是强联通的。对每一对节点对 u,v


,存在从


u





v


的路径。

(3





A


是非周期的。非周期性指马尔可夫链的状态的迁移不会陷入循环,随机过程不是简单循环。



16、正则表达式举例

‘.’ 通配符:代表任意字符,除\n以外,一个点一个字符

ret = re.findall(‘m…e’, “cat and mouse”)          #[‘mouse’]

‘*’ 重复匹配 允许*之前的一个字符重复多次

ret = re.findall(‘ca*t’, “caaaaat and mouse”)    # [‘caaaaat’]

‘?’ 也是重复匹配,但是?之前的字符只能重复0次或者1次

ret = re.findall(‘ca?t’, “cat and mouse”)           # [‘cat’]

ret = re.findall(‘ca?t’, “caaaaat and mouse”)   # [] ,无匹配

ret = re.findall(‘ca?t’, “ct and mouse”)             #[‘ct’]

‘+’ 也是重复匹配, 但是至少重复1次,不能是0次

ret = re.findall(‘ca+t’, “caaaaat and mouse”)    #[‘caaaaat’]

‘{}’ 也是重复匹配,但是匹配次数可以自行设置,次数可以是一个数,或者范围

ret = re.findall(‘ca{5}t’, “caaaaat and mouse”)     #5次,[‘caaaaat’]

ret = re.findall(‘ca{1,5}t’, “caaaat catd mouse”)   #1到5次,[‘caaaat’, ‘cat’]

‘[]’ 定义匹配的字符范围。比如 [a-zA-Z0-9] 表示相应位置的字符要匹配英文字符和数字, ‘-‘ 表示范围。

ret = re.findall(‘[0-9]{1,5}’, “12 cats and 6 mice”)      #[’12’, ‘6’]

‘\’ 转义字符,如果字符串中有特殊字符需要匹配,就需要进行转义。这些特殊字符包括. * ? + $ ^ [] {} | \ -。

ret = re.findall(‘\^c.t’, “^cat mouse”)              #[‘^cat’]

ret = re.findall(‘\[…\]’, “cat [and] mouse”)      #[‘[and]’]

提取超链接:re.findall(“http://[a-zA-Z0-9/\.\-]*”, s)

ret = re.findall(‘ca+t’, “caaaaat and mouse”)                                  #[‘caaaaat’]

ret = re.findall(‘ca+t’, “cat and mouse”)                                          #[‘cat’]

ret = re.findall(‘ca?t’, “ct and mouse”)                                            #[‘ct’]

ret = re.findall(‘[0-9]{1,5}’, “12 cats and 6 mice”)                            #[’12’, ‘6’]

ret = re.findall(‘[0-9]’, “12 cats and 6 mice”)                                   #[‘1′,’2’, ‘6’]

ret = re.findall(‘[0-9]{1,5}’, “1234567 cats and 6 mice”)                  #[‘12345′,’67’, ‘6’]

ret = re.findall(‘[0-9a-zA-Z]{1,5}’, “1234567 cats and 6 mice”)       #[‘12345′, ’67’, ‘cats’, ‘and’, ‘6’, ‘mice’]


17、爬虫大数据采集的技术体系

网络连接层:由TCP Socket连接的建立、数据传输以及连接管理组成 。

页面采集层:对URL的处理;

搜索策略;

实现Session机制:在抓取页面时,如果涉及动态页面,可能需要考虑在爬虫中实现session机制;

Cookie处理:最终的URL命令结果是通过HTTP协议数据包发送的,在头部信息中可以携带cookie信息。



版权声明:本文为IT_charge原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。