有关Python的一些基础面试题

目录

一、scrapy 比脚本好在哪

二、面向对象的三大特性

三、哪个更重要

四、反爬机制都有哪些

五、列表和集合有哪些区别

六、is == 有什么区别

七、面向对象 三大特性都什么意思 

八、讲解房价怎么爬的

九、除了python会其他语言吗

十、列表有哪些用法?

十二、分析一个疫情网站,爬取我们需要的数据

十三、将一个长文本解析成特定的数据格式


 

一、scrapy 比脚本好在哪

  1. Scrapy本身就是一个网页爬虫框架,提供完整的网页爬虫开发功能,有较佳的执行速度,学习曲线也较高;
  2. 另外,由于Scrapy是一个框架,所以有一定的专案架构及执行流程,除了未来很好维护外,也能够轻松的移转既有的专案到另一个专案。

二、面向对象的三大特性

  • 封装、继承和多态

三、哪个更重要

  • 继承更重要

四、反爬机制都有哪些

  1. 判断请求头来进行反爬,如User-Agent 用户代理,referer 请求来自哪里,cookie 也可以用来做访问凭证
  2. 根据用户行为来进行反爬,如请求频率过高,服务器设置规定时间之内的请求阈值
  3. js加密

五、列表和集合有哪些区别

集合具有以下特点:

  1. 无序;
  2. 可以用set()函数或者方括号{}创建,元素之间用逗号“,”分割;
  3. 不可索引,不可切片;
  4. 不可以有重复元素。

列表具有以下特点:

  1. 有序;
  2. 可以用list()函数或者方括号【】创建,元素之间用逗号“,”分割;  
  3. 使用索引来访问元素,可以切片;
  4. 可以有重复元素。

六、is == 有什么区别

  • is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。

七、面向对象 三大特性都什么意思 

  1. 封装 (Encapsulation):是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。
  2. 继承:是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
  3. 多态:是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作。

八、讲解房价怎么爬的

  1. 分析数据来源,找到售房网站,这里可以去安居客的官网爬取,发送请求;
  2. 获取数据,找到房名、价格、户型、地址等详细数据,返回文本信息;
  3. 解析数据,运用正则表达式将所需要的数据提取出来,通过循环的方式爬取所有数据;
  4. 保存数据,将所需要保存的数据写入表格当中。

九、除了python会其他语言吗

JAVA,C++


十、列表有哪些用法?

  1. 列表的基础用法:增删改查。
  2. 列表的额外用法:排序。

十二、分析一个疫情网站,爬取我们需要的数据

from selenium import webdriver
from selenium.webdriver.common.by import By

import time
d = webdriver.Chrome('D:\\an\Lib\site-packages\\chromedriver.exe')
d.get('https://wp.m.163.com/163/page/news/virus_report/index.html')
time.sleep(5)
print(d.page_source)

首先,通过selenium分析网站,将我们所需要的页面源码找出来,复制到自定义的html文件中,之后我们会利用Xpath从这个自定义的文件中将数据爬取出来。

from lxml import etree
op = open('疫情','r',encoding='utf8')
data = op.read()
op.close()
divs = etree.HTML(data).xpath('//li/div[@class="province"]')
print(divs)
data = [['地区','现有确诊','确诊','昨日新增','死亡','治愈']]
for div in divs:
    地区= div.xpath('span[1]/text()')[0]
    现有确诊= div.xpath('span[2]/text()')[0]
    确诊= div.xpath('span[3]/text()')[0]
    昨日新增= div.xpath('span[3]/span/text()')[0]
    死亡= div.xpath('span[4]/text()')[0]
    治愈= div.xpath('span[5]/text()')[0]
    print(地区,现有确诊,确诊,昨日新增,死亡,治愈)
    data.append([地区,现有确诊,确诊,昨日新增,死亡,治愈])
print(data)
import csv
with open('疫情1.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerows(data)

代码如上,将数据爬取出来之后,保存为.csv格式,效果如图:

十三、将一个长文本解析成特定的数据格式

解析前:
long_text = """
Variopartner SICAV
529900LPCSV88817QH61
1. TARENO GLOBAL WATER SOLUTIONS FUND
LU2001709034
LU2057889995
LU2001709547
2. TARENO FIXED INCOME FUND
LU1299722972
3. TARENO GLOBAL EQUITY FUND
LU1299721909
LU1299722113
LU1299722030
4. MIV GLOBAL MEDTECH FUND
LU0329630999
LU0329630130
"""
解析后:
data1 = {
    'name': 'Variopartner SICAV',
    'lei': '529900LPCSV88817QH61',
    'sub_fund': [{
        'title': 'TARENO GLOBAL WATER SOLUTIONS FUND',
        'isin': ['LU2001709034', 'LU2057889995', 'LU2001709547']
    }, {
        'title': 'TARENO FIXED INCOME FUND',
        'isin': ['LU1299722972']
    }, {
        'title': 'TARENO GLOBAL EQUITY FUND',
        'isin': ['LU1299721909', 'LU1299722113', 'LU1299722030']
    }, {
        'title': 'MIV GLOBAL MEDTECH FUND',
        'isin': ['LU0329630999', 'LU0329630130']
    }]
}

 这里我们直接用正则将文本中的数据给匹配成我们想要的格式就行了,解析代码如下:

import re
lists = re.split('\d+\. ',long_text)
name_lei = lists[0].strip().split('\n')
dicts = {'name':name_lei[0],'lei':name_lei[1]}
lists_total = []
for i in lists[1:]:
    lists1 = i.strip().split('\n')
    dicts1 = {'title':lists1[0],'isin':lists1[1:]}
    lists_total.append(dicts1)
dicts['sub_fund'] = lists_total
print(dicts)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值