爬虫(二)爬虫基础题总结及常见面试题整理

目录

1.页面请求成功状态码为?页面找不到状态码为?

2.有一个列表 a =[‘ever’,’never’,’there’,’verbs’,’erang’,’ler’],如何用正则匹配出里边的ever,never,ler,写出代码?

3.写一个正则表达式,使其能同时识别下面的字符串:'bat' 'bit' 'but' 'hat' 'hit' 'hut'

4.requests返回的content和text的区别是什么?

5.dump,dumps,load,loads的区别?

6.写出python链接mysql数据库的代码,并向xs表中插入(name,age)字段的数据

7.post和get的区别?

8.什么是贪婪模式,什么是非贪婪模式,他们之间的区别?

9.什么是异常?捕获异常有几种方式?

10.结构化数据和非结构化数据介绍和区别?

11.什么是迭代器?什么是可迭代对象?他们之间可以转化吗?如何转化?

12.requests模块中get方法返回的对象是一个response对象,请写出你知道的这个对象的属性,并说出其含义?

13.请说出decode()方法和encode()方法的区别?

14.json数据本质上是什么?我们如何解析json数据?请说出dumps和loads方法的区别?

15.列举您使用过的pytho网络爬虫所用到的网络数据包?

16.写爬虫是用多进程好?还是多线程好?为什么?

17.HTTPS是如何实现安全传输数据的?

18.说说下面几个概念:同步、异步、阻塞、非阻塞

19.python中类方法、类实例方法、静态方法有和区别?

20.python中list、tuple、dict、set有什么区别,主要应用在什么样的场景?

22.多线程交互,访问数据,如果访问到了就不访问了,怎么避免重读?

23.a = 'abbbccc' 用正则匹配为abccc 不管有多少个b,就出现一次?

 

1.页面请求成功状态码为?页面找不到状态码为?

200    404

2.有一个列表 a =[‘ever’,’never’,’there’,’verbs’,’erang’,’ler’],如何用正则匹配出里边的ever,never,ler,写出代码?

import re
a =[‘ever’,’never’,’there’,’verbs’,’erang’,’ler’]
for item in a:
       pattern = re.compile(r'.*?[er]')
       data = pattern.findall(data)
       if data:
            print(result)

 

3.写一个正则表达式,使其能同时识别下面的字符串:'bat' 'bit' 'but' 'hat' 'hit' 'hut'

import re
s = "'bat', 'bit', 'but', 'hat', 'hit', 'hut"
p = re.compile('([bh][aiu]t)')

4.requests返回的content和text的区别是什么?

content是二进制文件,需要解码

text是返回的字符串类型

5.dump,dumps,load,loads的区别?

dumps()是将python的dict数据类型转换为json字符串

loads()是将json字符串转换为dict的数据类型

dump(x,y) 其中x是json对象,y是文件对象,是将json对象写入到文件中去

load(y)是从文件中读取对象

6.写出python链接mysql数据库的代码,并向xs表中插入(name,age)字段的数据

import pymysql
#链接数据库
connect = pymysql.connect(host='localhost',db='test',user='root',password='222')
#创建游标
cursor = connect.cursor()
sql = 'insert into xs(name,age) values(%s,%s)'
try:
    cursor.excute(sql,(name,age))
    connect.commit()
    print('数据插入成功')
except Exception as e:
    print(e)
    print('数据插入错误')

7.post和get的区别?

get提交的数据放在URL中,post则不会。这点意味着get更不安全(post也不安全,因为HTTP是明文传输抓包就能获取数据内容,要想安全还得加密)

get回退浏览器无害,post会再次提交请求(get方法回退后浏览器在缓存中拿结果,post每次都会创建新资源)

get提交的数据大小有限制(是因为浏览器对URL的长度有限制,get本身没有限制)post没有限制

get可以被保存成书签,post不可以。

get能被缓存,post不能

get只允许ASCII字符,post没有限制

get会保存在浏览器历史记录中,post不会

8.什么是贪婪模式,什么是非贪婪模式,他们之间的区别?

贪婪模式:在整个表达式匹配成功的前提下,尽可能多的匹配(*)

非贪婪模式:在整个表达式匹配成功的前提下,尽可能少的匹配(?)

python里数量词默认是贪婪的

9.什么是异常?捕获异常有几种方式?

(1)异常:

异常是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况下,在python无法正常处理程序时就会发生一个异常。异常是Python对象,表示一个错误,当pyhton脚本发生异常时我们需要捕获处理它,否则程序会终止执行。 程序在运行时,如果python解释器遇到一个错误,会停止程序的执行,并且提示一些错误信息,这就是异常,程序停止执行并提示错误信息这个动作,我们通常称之为:抛出(raise)异常

(2)方式:

Try...except ...     try... except...esle...

try...except...finally...

10.结构化数据和非结构化数据介绍和区别?

(1)结构化:

结构化数据:即行数据,存储在数据库中,可以用二维表结构来逻辑表达实现的数据,例如:json格式的数据、XML格式的数据(自定义标记语言)

(2)非结构化:

非结构化数据:包括所有格式的办公文档、文本、图片、XML、HTML、各类报表、图像和音频、视频信息等等

(3)区别:

结构化数据:先有结构,再有数据;非结构化数据:先有数据,再有结构

11.什么是迭代器?什么是可迭代对象?他们之间可以转化吗?如何转化?

迭代器是指有__next__属性的对象

可迭代对象是指由__iter__属性的对象

可迭代对象可以通过iter()方法转化为迭代器

12.requests模块中get方法返回的对象是一个response对象,请写出你知道的这个对象的属性,并说出其含义?

1.响应内容:

字符串类型:response.text   本质上是通过response.encoding的编码进行转码字符串

二进制类型(bytes):reposne.content

二进制类型的作用:进行乱码问题的解决;图片视频等内容的下载

2。响应内容的编码:response.encoding

3.获取响应json内容: response.json()

4.response.status_code:  获取状态码

5.response.url : 获取请求的url

6.response.headers: 获取响应头

13.请说出decode()方法和encode()方法的区别?

decode()方法是bytes类型的方法,可以将字节类型按照指定编码转化成字符串

encode()方法是字符串的方法,可以将字符串按照指定编码转化成字节类型

14.json数据本质上是什么?我们如何解析json数据?请说出dumps和loads方法的区别?

json数据本质上就是字符串

解析json数据可以使用json模块

json.dumps方法可以将字典或者list转化为json字符串

json.loads方法可以将json字符串转化为字典或者list

15.列举您使用过的pytho网络爬虫所用到的网络数据包?

requests urllib

16.写爬虫是用多进程好?还是多线程好?为什么?

如果是IO密集型代码(文件处理、网络爬虫等),多线程能够有效提升效率(单线程下有IO操作会进行IO等待,造成不必要的时间浪费,而开启多线程能在线程A等待时,自动切换到线程B,可以不浪费CPU的资源,从而能够提升程序执行效率)。在实际的数据采集过程中,既考虑网速和响应的问题,也需要考虑自身机器的硬件情况,来设置多进程或多线程。

17.HTTPS是如何实现安全传输数据的?

HTTPS其实就是在HTTP跟TCP中间加多了一层加密层TLS/SSL。SSL是个加密套件,负责对HTTP的数据进行加密,TLS是SSL的升级版。现在提到HTTPS,加密套件基本值得是TLS。原先是应用层将数据直接给到TCP进行传输,现在改成应用层将数据给到TCL/SSL,将数据加密后,再给到TCP进行传输

18.说说下面几个概念:同步、异步、阻塞、非阻塞

同步:多个任务之间有先后顺序执行,一个执行完下个才能执行

异步:多个任务之间没有先后顺序,可以同时执行,有时候一个任务可能要在必要的时候获取另一个同时执行的任务的结果,这个就交回调。

阻塞:如果卡住了调用者,调用者不能继续往下执行,就是说调用者阻塞了。

非阻塞:如果不会卡住,可以继续执行,就是说非阻塞的

同步异步相对于多任务而言,阻塞非阻塞相对于代码执行而言。

19.python中类方法、类实例方法、静态方法有和区别?

类方法:是类对象的方法,在定义时需要在上方使用@calssmethod 进行装饰,形参为cls,表示类对象,类对象和实例对象都可调用

类实例方法:是类实例对象的方法,只有实例对象可以调用,形参为self,指代对象本身

静态方法:是一个任意函数,在其上方使用 @staticmethod 进行装饰,可以用对象直接调用,静态方法实际上跟该类没有太大联系。

20.python中list、tuple、dict、set有什么区别,主要应用在什么样的场景?

区别:

三个维度:有序,安全性(可不可以修改)、重复

(1)list、tuple是有序的;dict set 是无序的

(2)list元素可变  tuple元素不可变

(3)dict和set的key值不可变 唯一性

(4)set的用途:去重、并集、交集等

(5)set只有key 没有value

(6)list tuple :+ * 索引 切片 检查成员等

(7)dict查询效率高,但是消耗内存多;list tuple 查询效率低,但是消耗内存少

应用场景:

list:简单的数据集合,可以使用索引

tuple:把一些数据当做一个整体去使用,不能修改;

dict:使用键和值进行关联的数据

set:数据只出现一次,只关心数据是否出现,不关心其位置

22.多线程交互,访问数据,如果访问到了就不访问了,怎么避免重读?

创建一个已访问列表,用于存储已经访问过的数据,并加上互斥锁,在多线程访问数据的时候先查看数据是否已经在已访问的列表中,若已存在就直接跳过。

23.a = 'abbbccc' 用正则匹配为abccc 不管有多少个b,就出现一次?

re.sub(r'b+','b',a)

 

你可能感兴趣的:(IT,互联网,网络爬虫,IT,爬虫,面试题)