大家好,又见面了,我是你们的朋友全栈君。
一、填空题
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信息。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/149061.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...