准备的一些爬虫面试题

最近准备试试外面的市场,找找看外面的岗位,给自己找点后路,防止到时候被裁被动。
我将面试题分为基于scrapy框架与普通爬虫【requests/aiohttp等开发的爬虫】

普通爬虫面试题

列举反爬虫机制

(1) UA 检测,请求头合法性
(2) Robots 协议
(3) 验证码
(4) IP 封禁
(5) 账号封禁
(6) 动态数据加载
(7) 请求参数加密/响应结果加密
(8) 隐藏参数
(9) 字体反爬

针对 requests 请求的响应对象,如何获取其文本形式,二进制形式及 json数据?

# 获取文本形式的响应内容
text_content = response.text

# 获取二进制形式的响应内容
binary_content = response.content

# 获取JSON数据
json_data = response.json()

文本形式(Text):
适用场景: 当你处理的是文本数据,比如HTML网页内容、纯文本文件等时,可以使用.text属性获取文本形式的响应。
示例应用: 网页爬取、文本数据分析、日志文件读取等。

二进制形式(Binary):
适用场景: 当你处理的是二进制数据,比如图片、音频、视频文件等时,可以使用.content属性获取二进制形式的响应。
示例应用: 下载文件、处理图像数据、处理音频或视频数据等。

JSON数据:
适用场景: 当你请求的资源返回的是JSON格式的数据时,使用.json()方法能够方便地将JSON数据解析为Python字典或列表。
示例应用: 与API交互、处理前端通过AJAX请求返回的数据、处理包含结构化信息的数据等。

正则表达式中 (.) 和 (.?) 匹配区别

(1) (.):贪婪匹配,尽可能多的匹配
(2) (.
?):非贪婪匹配,尽可能少的匹配

举例如下:

贪婪匹配 (.*):

(.) 是贪婪匹配模式。这意味着它会尽可能多地匹配字符,直到无法匹配为止。在贪婪模式下,. 会匹配尽量多的字符。

text = "This is a test. This is another test."
pattern = re.compile(r'This is (.*) test\.')
match = pattern.search(text)
print(match.group(1))

输出结果
“a test. This is another”

非贪婪匹配(.*?)

(.?) 是非贪婪匹配模式。这表示它会尽可能少地匹配字符,直到满足条件为止。在非贪婪模式下,.? 会匹配尽量少的字符。

pattern = re.compile(r'This is (.*?) test\.')
match = pattern.search(text)
print(match.group(1))

输出结果:
“a”

Re 模块常用的三个匹配方法,并简述其特点

(1) Re.findall():以列表形式返回所有满足条件的对象
(2) Re.search():匹配到第一个就返回一个对象 ,用 group()取值,匹配不到返回 None
(3) Re.match():从字符串开头匹配,匹配返回一个对象,用 group()取值,匹配不到返回 None

Xpath 中根据索引定位节点数时,索引从 1 开始

示例

请列举爬虫中解析数据的模块

我使用的一般有以下四种库【模块】
lxml re bs4 json
我使用lxml内的etree与re来解析静态页面,常用用xpath定位数据节点,获取需要的数据。

你可能感兴趣的:(python爬虫综合,爬虫)